Hi everyone,

Most people seem to agree on how to divide the tiers in an n-tier system: 1-UI, 2-Business Objects, 3-Data Objects, 4-Database System. However, there seems to be two ways to deploy the business objects tier.

In Microsoft's web site and in books published by Microsoft Press, the business objects and data objects are deployed on an application server (usually with MTS). To minimize network traffic and server load, both tiers are designed to be as stateless as possible.

Recently, I've read Rockford Lhotka's Visual Basic 6 Business Objects. For the business objects tier, he recommends a "pure" object oriented design where objects have state, and practically everything is an object. For example, an invoice is represented by an invoice object. It will containt a collection of child objects representing line items. Fields are accessed via properties of objects.

To prevent the increase in network traffic and server load, he recommends putting the business objects on the client workstation. The data objects continue to be stateless and stay on the application server.

One advantage of this design is it allows a richer and more sensitive UI while maintaining a clean separation between presentation and business rules. For example, let's say you have a business rule that restricts a product code to 10 characters, and you want the error flagged the moment a user enters the 11th character. Try implementing that with stateless business objects residing on the application server. You can use the MaxLength property of the TextBox, but this would put the business rule on the UI.

I'm curious how many of you follow this approach. If you do, how do you solve the problem of upgrading business objects on several client workstations? If you follow the stateless business objects approach, how do you implement business rules like my example above? Are there any designs where you get the best of both worlds? Thanks.

Jason