Hi everyone. I've been reading a lot about n-tier development. From what I've read in books, articles, and this thread, it seems to me that most people agree on the division of the tiers (1 - UI, 2 - Business Services, 3 - Data Services, 4 - Database System).
However, there seems to be two approaches in the design and deployment of the second tier (Business Services):
1. Deploy the business services tier on the application server. To minimize network traffic between this tier and the UI, design this tier to be as stateless as possible. This seems to be the approach followed by John K of this thread and Mary Kirtland who wrote Designing Component-Based Applications, published by Microsoft Press.
2. Design the business services tier using a "pure" OO approach, where objects have properties, and everything is an object, e.g. an invoice object contains a collection of child objects, each representing a line item. Deploy the business services tier on the client workstation, since this approach would cause too much network traffic if it were deployed on an application server. This seems to be the approach followed by Steven Taylor and VB400 based on Rockford Lhotka's Visual Basic 6 Business Objects (Wrox).
The first approach is better when it comes to maintenance. To update the business services tier, just update the application server. The second approach would require updating all the client workstations.
However, the first approach seems to compromise on design. Stateless objects which are all procedures and have no properties doesn't sound much like an OO design to me. (That's how I designed my C modules in college. <grin>)
Also, the second approach allows for a richer and better designed UI. Let's say you have a business rule that restricts a product code to 10 characters, and you want the error caught the moment the user enters the 11th character in a text box. That first approach would require that you implement this rule in your business services tier AND your UI.
I'm curious which approach most of you use. Also, what are the other advantages and disadvantages? Are there other ways to go about it so you get the best of both worlds? Please correct me if anything I have stated here is inaccurate. Thanks.
Jason