170 likes | 386 Views
Distributed Smart Client Applications November 2004. Jay Traband, CTO jayt@ideablade.com www.ideablade.com. Glad to be here. What is a Distributed Smart Client?. Distributed Processing in multiple places Data in multiple places Smart Client Maximized client-side processing
E N D
Distributed Smart Client Applications November 2004 Jay Traband, CTO jayt@ideablade.comwww.ideablade.com
What is a Distributed Smart Client? • Distributed • Processing in multiple places • Data in multiple places • Smart Client • Maximized client-side processing • Presentation layer • Business logic • Ability to run disconnected • One-click deployment
RelationalDatabase PCClients BusinessObject Server Typical 3-Tier Architecture DataTier MiddleTier ClientTier Internet
Business Object Persistence • How do I get data out of my database & into my business objects? • Do I pick a specific database vendor or write vendor neutral code? • Do my developers all need to know SQL? If so how do I isolate it? • How much business logic do I put in the database (stored proc/triggers etc)? • How do I handle concurrency, transactions, and multiple databases?
What is a Business Object? • An instance of a class with . . . • Business data - “Salary” • Business logic - “GarnishWages()” • Business events - “SalaryChanged” • Persistence • Identity
RelationalDatabase SQL SQL DataEncapsulation Data BusinessObject BusinessObject BusinessObject ObjectRelationalMapping SQL Business Objects Persistence Options DataTier BusinessModel
Why Object-Relational Mapping • Decouple object and database semantics • Encapsulate database schema • Database & derived properties look the same • employee.BirthDate, employee.Age • Object graph navigation • “dot” notation vs. n-way joins & sub-selects“customer.Address.City” vs. “Select City from Address where Address.Id = Customer.AddressId and Customer.Id=12345” • Minimize or eliminate developer SQL • Custom and conflicting SQL • Stored Procedures • Database independence
Enterprise-class ORM • Separate business object developers from consumers • Hide / filter / extend business objects for consumers • In-memory, fine-grain object cache • Offline mode; local persistence • Object query language • Views, stored procedures, & user-defined fields • Round-tripping: handle triggers & db calculations • Transactions & optimistic concurrency • Database independence
Business Object Mobility • How do I move business objects between the object server and the client? • Do I use web Services, remoting, message queues or all of the above? • How do I handle firewalls & proxy servers? • Should I pass data, objects or distributed refs to objects? • How do I provide security? • Authentication / Authorization • Secure execution context & code access security • What performance / scalability tradeoffs am I making?
Distributed Processing Issues • Object oriented design conflicts withScalable distributed design • Object methods and properties are fine grained,distributed methods are chunky • Object mobility (marshal by value vs marshal by ref) • Data Locality – data close to where used • Stateless objects for scalability;Stateful objects for ease of development • Session info, load balancing & threading
RelationalDatabase SQL Object Remoting Web Services / RPC BusinessObject Web Services /XML Documents BusinessObject BusinessObject PCClients Distributing Data / Objects DataTier MiddleTier ClientTier Scalability, Reliability Too Fine Grained Data, not Objects Object Fidelity
Where is the Business Logic? Data Tier, Middle Tier, Client Tier ? • Middle Tier – the standard answer • Logic all in one place • Security • Middle Tier (some in Data Tier) • + Performance • - Encapsulation • Client Tier and Middle Tier (Object mobility) • Logic still in one “place” … the business object • Business object execution space can vary • Best performance • Security is shared between the tiers
Client Side Processing • How do I manage my business objects on the client? • How do I keep them in synch with the server? • Do I cache business objects on the client? • How do I handle large object graphs? • How do I operate when not connected to the server? • How do I query for objects on the client? • How do I keep my user interface in synch with my business objects? • How do I insure that any change to a business object appears in the user interface? • How do I insure that refreshed data from the object server appears in the user interface?
ModelController ViewControllers SalesRep1 SalesRep3 SalesRep4 SalesRep2 BusinessObject BusinessObject BusinessObject Client View Model–View–Controller Controller Model
BusinessObjectServer Databinding Database SQL Table Rows Remoting BusinessObjects Client Distributed Smart Client Architecture DataTier MiddleTier ClientTier Controller View Model
Jay Traband, CTOjayt@ideablade.comwww.ideablade.com Thanks For Your Time