Custom software development of Windows, Web Windows Phone, Azure and Silverlight applications – Mentoring services to get you started and keep you going • Web site: www.deveload.com
Accessing your Business Objects from your Silverlight application – Drag and drop approach – Refactored to MVVM • Tips and tricks for getting the most from WCF RIA and your business objects with Silverlight – Entity relationships – Validation
data using methods in your POCO classes – Save data using methods in your POCO classes – Call non-entity methods in your POCO classes – Access POCO class properties via generated client code • Does NOT: – Leverage any code in the property setters of your POCO classes • Requires attributes instead – Perform any initialization from your POCO classes • Does not execute the constructor until submit
WCF Service • Auto-generation of client-side DTO classes – Ready for binding to the UI • Propagation of attributes (and code) from BL to client – Shared validation • DataContext for managing state and change tracking • Query, Update, Insert, and Delete operations – Plus the WCF-style Invoke • Automatic enforcement of validation rules
2010 SP1 comes with Silverlight 4 – Visual Studio 2010 comes with Silverlight 3 • WCF RIA Services V1.0 SP 1 – Included with Visual Studio 2010 SP1 • Silverlight Toolkit – Provides controls, themes, and more • http://silverlight.codeplex.com
– Including unit tests • Add a Silverlight Project – Enable WCF RIA Services – Creates the ASP.NET project • Code the ASP.NET application – Set a reference from the ASP.NET application to your business object component – Domain Service classes • Build the Silverlight UI (Views) and classes (ViewModels)
a key defined • Must be a public property • Normally the same as your entity’s database key field [KeyAttribute()] public int CustomerId { get; internal set; }
is displayed when using drag and drop • Validation – Required – Range – Regular Expression – StringLength – Custom [Required(ErrorMessage="A Last Name must be entered.")] public string LastName
Sources Window populated with domain context info – Uses a DomainDataSource • Code behind – Call domain context methods to populate the data – Bind to the result • MVVM – Call domain context methods to populate the data – Bind to the result
– Generated_Code folder – Exposes the application services from the ASP.NET application and the types from the BOs to Silverlight – Not much in here until you create Domain Service classes
project • Set a reference to your business object component • Build one Domain Service class for each primary business entity • Provides the “link” between your business objects and Silverlight
a property using ACM.BL; ... [EnableClientAccess()] public class CustomerDomainService : DomainService { public IEnumerable<Customer> GetCustomers() { return Customers.Retrieve(); } }
Retrieve, Select) – Update (Update, Change, Modify) – Insert (Insert, Add, Create) – Delete (Delete, Remove) – Invoke – Named Update • Matched via Convention (name and signature) or Attribute • Not overloadable • Wraps the call to the appropriate BO method
domain entity – Entity can be EF, Linq to SQL, or POCO – Used to pass data through WCF • Domain Context – Generated class that makes the WCF service calls – Makes queries and tracks entity state public sealed partial class Customer : Entity {} public sealed partial class CustomerDomainContext : DomainContext {}
business object property – Example: Last Name • Automatically copied to the Silverlight client • Validated: – When leaving the field – Before submitting to the server
server-side business object properties • Example: Phone Number and Description • OR add Custom attribute to the class • Add a shared file to contain the custom logic • Automatically copied to the Silverlight client • Validated: – When leaving the field • If the attribute is associated with a property – Before submitting to the server
partial class • Single or multiple field validation (Email Address) • ViewModel (asynchronous validation) – Implement on property changed • Single field, multiple field, or invoked server method (IsNameDuplicate) • Validated: – Client Only • Not automatically checked on submit – Must also call on Insert/Update operations
• Issue: Attribute based validation on a ComplexObject – Only occurs automatically on save, not on leaving the field if (!string.IsNullOrWhiteSpace(value) && !value.Contains("@")) this.ValidationErrors.Add (new ValidationResult("Email address must include an '@’.", new string[] {"EmailAddress"}));
Plain Old CLR objects (POCOs) for use by Silverlight • Accessing your POCOs requires a set of Domain Service classes in the ASP.NET application • Tips and Tricks • Lots of options for validation