Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Microsoft Silverlight, WCF RIA Services and Your Business Objects

Microsoft Silverlight, WCF RIA Services and Your Business Objects

Presented at TechEd South Africa 2011

Daron Yondem

October 17, 2011

More Decks by Daron Yondem

Other Decks in Programming


  1. Submit your session evaluation for a chance to win! Sponsored

    by MVA http://microsoftvirtualacademy.com
  2. Microsoft Silverlight, WCF RIA Services and Your Business Objects Daron

    Yondem Chief Architect | DEVELOAD Software Microsof Regional Director Silverlight MVP INETA MEA President
  3. Daron Yöndem is • Silverlight MVP • Microsoft Regional Director

    for MEA • INETA MEA President • Book Author about HTML5, ASP.NET AJAX, Silverlight • Architect at DEVELOAD Software • Blog at http://daron.yondem.com
  4. DEVELOAD is • Consulting – Software architecture and design –

    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
  5. You Are... • Using WCF RIA Services? – Already using

    it in an application • With Entity Framework • With your own business objects • Just getting started? • Evaluating it?
  6. This Talk Is… • Overview of WCF RIA Services •

    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
  7. WCF

  8. WCF RIA Service • Provides the tools to – Retrieve

    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
  9. WCF RIA vs WCF • Automatic configuration of the underlying

    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
  10. Installing WCF RIA Services • Silverlight 4 – Visual Studio

    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
  11. Building a LOB Application • Build the business objects (POCOs)

    – 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)
  12. Building the Business Objects • Build your business objects in

    a class library component – VB or C# • Decorate your classes for WCF RIA Services – Set a Reference • System.ComponentModel.DataAnnotations
  13. Key Attribute • Every entity accessible to Silverlight must have

    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; }
  14. Other Important Attributes • Display – Defines how the property

    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
  15. Tips: • Metadata class • Exclude attribute – System.ServiceModel.DomainServices.Server •

    Shared files • Properties defined with an Enum • Linked resource files <ItemGroup> <EmbeddedResource Include="..\ACM.BL\Resources\ValidationErrorResources.resx"> <Link>Resources\ValidationErrorResources.resx</Link> <LogicalName>ACM.BL.Resources.ValidationErrorResources.resources</LogicalName> </EmbeddedResource> </ItemGroup>
  16. Adding a Silverlight Application • Enable WCF RIA Services •

    Adds two projects – Silverlight – Web
  17. Building the Silverlight Application • Drag and drop – Data

    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
  18. Tips • View generated code – Click Show All Files

    – 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
  19. Tips • Partial classes – Extend the business object •

    Partial methods – Perform validation – Work with calculated properties • Design-time data
  20. Building the Domain Service Classes • Built in the ASP.NET

    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
  21. Add Wrapper Methods (Query) • Must be a method, not

    a property using ACM.BL; ... [EnableClientAccess()] public class CustomerDomainService : DomainService { public IEnumerable<Customer> GetCustomers() { return Customers.Retrieve(); } }
  22. DomainService Methods • Available Methods: – Query (Get, Fetch, Query,

    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
  23. Generated Classes • Entity – Generated class based on the

    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 {}
  24. • Domain Service • Source Entity • Validation Attributes •

    Metadata Classes • Shared Code • Resource Files • Generated Entity (DTO) • Generated Domain Context
  25. Relationships • Complex Types – Non-entity/No KeyAttribute – Example: Phone,

    Address • Association – Parent/Independent child – Example: Customer/Invoice • Composition – Parent/Dependent child – Example: Invoice/Invoice Item [Association("Customer_Invoice", "CustomerId", "CustomerId")] [Include] public List<Invoice> InvoiceList [Association("Invoice_InvoiceLineItem", "InvoiceId", "InvoiceId")] [Composition] [Include] public List<InvoiceItem> InvoiceItems
  26. Validation: Simple Single Field • Add attribute to the server-side

    business object property – Example: Last Name • Automatically copied to the Silverlight client • Validated: – When leaving the field – Before submitting to the server
  27. Validation: Custom • Add Custom attribute to one or more

    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
  28. Validation: Silverlight Client • Model – Implement partial method in

    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
  29. Validation Tips • Use the ValidationResult to define validation errors

    • 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"}));
  30. Silverlight, RIA Services & POCO • You can decorate your

    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
  31. Submit your session evaluation for a chance to win! Sponsored

    by MVA http://microsoftvirtualacademy.com