Ron Jacobs, Patterns and Practices Group

 

Smart Client Application

  • ThompsonOne - Analytics
    • Trading information
  • Clients -> Fat Client -> Thin Client -> Smart Client
  • Composite Smart Client
  • Integrated Dell Desktop
    • High call center turnover
    • Started on web application
    • But it was not quite good enough, kept adding java script
    • Up to 500,000 lines of java script and it did not make sense
    • Moved to windows form application, independent applications
    • Session, Workflow, display (with promotion, customer, etc)
    • For example, tech support can locate cust support
  • Commonwealth Bank of Austrailia
    • OS2 application, had invested in special keyboards
    • Stuck with special keyboards
    • Went to composite, looks like web
    • Per user customization
  • Composite UI Application Block
  • Composite Application Benefits
    • Richer user experience
    • Integrated disparate apps
    • Ability to reuse in different environments
    • Manageable footprint, central shell of common services
  • Architecture
    • Empty Shell… contains some areas, module catalog, etc.
    • Module just adds element menu items and views, cab manager displays
    • Module also has work items, shared state, events, whatever else it needs
    • Shell is like office manager, assigns where modules can load things…
    • Workspaces, mdi, card, tab
  • Model / View / Controller panel - Pattern
    • Model = Data
    • View = UI for data
    • Controller = What can you do, add, update, etc.
  • Demo
    • Bank shell
    • Can "answer" phone, view related data
  • Dependency injection - Pattern
    • Small child walks in, sign says "I Need A Parent", Ichild
    • Adults "Parent"
    • Child has dependency needs parent but cannot select parent
    • Parents all want to adopt
    • So adoption agent decides which is the most suitable parent and connects them
    • Dependencies will cause proper services to be inialized
  • Service Locator
  • Shared WorkItemState
    • Can be loosly typed, dictionary or wrap in get/set to make it more strongly typed
    • Receive a workspace
    • Load what you want in it
  • Event Broker
    • Publisher / Subscriber model
    • Have to agree on topic
    • Can be invoked on a specific thread, ui, backround,etc