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

017286889e25c87cb44b20ceca2d1d79?s=128

Daron Yondem

October 17, 2011
Tweet

Transcript

  1. 17-20 OCTOBER 2011 DURBAN ICC

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

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

    Yondem Chief Architect | DEVELOAD Software Microsof Regional Director Silverlight MVP INETA MEA President
  4. 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
  5. 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
  6. 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?
  7. 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
  8. Silverlight

  9. Accessing Data

  10. WCF

  11. WCF RIA

  12. WCF RIA + BOs

  13. 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
  14. 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
  15. None
  16. 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
  17. 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)
  18. Let’s roll!

  19. 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
  20. 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; }
  21. 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
  22. 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>
  23. Adding a Silverlight Application • Enable WCF RIA Services •

    Adds two projects – Silverlight – Web
  24. 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
  25. 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
  26. Tips • Partial classes – Extend the business object •

    Partial methods – Perform validation – Work with calculated properties • Design-time data
  27. 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
  28. 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(); } }
  29. 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
  30. 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 {}
  31. • Domain Service • Source Entity • Validation Attributes •

    Metadata Classes • Shared Code • Resource Files • Generated Entity (DTO) • Generated Domain Context
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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"}));
  37. 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
  38. THANKS!!! daron@yondem.com http://daron.yondem.com

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

    by MVA http://microsoftvirtualacademy.com