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
Tweet

More Decks by Daron Yondem

Other Decks in Programming

Transcript

  1. 17-20 OCTOBER 2011
    DURBAN ICC

    View Slide

  2. Submit your session
    evaluation for a
    chance to win!
    Sponsored by MVA
    http://microsoftvirtualacademy.com

    View Slide

  3. Microsoft Silverlight, WCF RIA Services
    and Your Business Objects
    Daron Yondem
    Chief Architect | DEVELOAD Software
    Microsof Regional Director
    Silverlight MVP
    INETA MEA President

    View Slide

  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

    View Slide

  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

    View Slide

  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?

    View Slide

  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

    View Slide

  8. Silverlight

    View Slide

  9. Accessing Data

    View Slide

  10. WCF

    View Slide

  11. WCF RIA

    View Slide

  12. WCF RIA +
    BOs

    View Slide

  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

    View Slide

  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

    View Slide

  15. View Slide

  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

    View Slide

  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)

    View Slide

  18. Let’s roll!

    View Slide

  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

    View Slide

  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; }

    View Slide

  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

    View Slide

  22. Tips:
    • Metadata class
    • Exclude attribute
    – System.ServiceModel.DomainServices.Server
    • Shared files
    • Properties defined with an Enum
    • Linked resource files


    Resources\ValidationErrorResources.resx
    ACM.BL.Resources.ValidationErrorResources.resources


    View Slide

  23. Adding a Silverlight Application
    • Enable WCF RIA Services
    • Adds two projects
    – Silverlight
    – Web

    View Slide

  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

    View Slide

  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

    View Slide

  26. Tips
    • Partial classes
    – Extend the business object
    • Partial methods
    – Perform validation
    – Work with calculated properties
    • Design-time data

    View Slide

  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

    View Slide

  28. Add Wrapper Methods (Query)
    • Must be a method, not a property
    using ACM.BL;
    ...
    [EnableClientAccess()]
    public class CustomerDomainService : DomainService
    {
    public IEnumerable GetCustomers()
    {
    return Customers.Retrieve();
    }
    }

    View Slide

  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

    View Slide

  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
    {}

    View Slide

  31. • Domain Service • Source Entity
    • Validation Attributes
    • Metadata Classes
    • Shared Code
    • Resource Files
    • Generated Entity (DTO)
    • Generated Domain Context

    View Slide

  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 InvoiceList
    [Association("Invoice_InvoiceLineItem",
    "InvoiceId", "InvoiceId")]
    [Composition]
    [Include]
    public List InvoiceItems

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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"}));

    View Slide

  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

    View Slide

  38. THANKS!!!
    [email protected]
    http://daron.yondem.com

    View Slide

  39. Submit your session
    evaluation for a
    chance to win!
    Sponsored by MVA
    http://microsoftvirtualacademy.com

    View Slide