• If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • Dokkio Sidebar (from the makers of PBworks) is a Chrome extension that eliminates the need for endless browser tabs. You can search all your online stuff without any extra effort. And Sidebar was #1 on Product Hunt! Check out what people are saying by clicking here.


How to Architect a Smart Client App

Page history last edited by Phil Dennis 12 years, 5 months ago

Convener: Phil Dennis @pjdennis

I have just finished rolling out a small smart-client app to production, and hosting a discussion on Smart Client architecture in light of that experience. The technologies I used:

  • POCO domain model
  • NHibernate for data access
  • Service layer exposed using WCF
  • WPF with MVC architecture for client-side presentation

As a starting point for discussion, here are some "rules" for Smart Client development. These are things we get "for free" to some extent, in web applications:

  1. All access to external resources should Be done via a physically separate service layer:
    • Enables proper security
    • Enables scalability
    • Simplifies deployment
  2. No out-of-process calls from within UI event handlers
    • Goal: responsive user interface
    • Implementation: Asynchronous access to the service layer
  3. Minimize consecutive calls to the service layer - A single user action should result in a single call to the service layer
    • Goal: Minimize latency of the user interface
    • Enables atomicity of updates, e.g. to a database


Tools Mentioned:



  • Working disconnected
  • synchronization
  • security and impact on the client (trust levels, deployment)



Why WPF over WinForms:

  • seems like future tech, Microsoft is going more this way (VS2010)
  • better data binding story
  • auto layout capabilities


Architecture (examples):

  • Shared domain layer across all tiers (service, DTO, client all use the same classes)




Comments (0)

You don't have permission to comment on this page.