My buddy Clemens Vasters wrote a few days ago that you don't need inheritance or full data encapsulation for business objects. Some other dude wrote a passionate response to him saying that he was all wrong.
You see out here in the real world, in the coding trenches, the “full data encapsulation” in your business objects just doesn’t hold any water. Who reuses a customer object between applications? At my company we don’t even have a customer object! But we do have customers. :) The data logic all should be handled by the database. Way too much effort, code and BS to deal with when you do it otherwise.
Academic conference speakers who don't write code in the real world always argue to over complex-ify the application. I'm sorry, anyone paid to write code in a production environment has no desire to throw all this logic into the objects and have lots of levels of inheritance so they are “reusing code”. Sure sure we all read the Gang of Four's book and spend a year using all the design patterns but then come back after that year only using the few that make sense to our application. Academic conference speakers who don't write production code should take a year off, write some production code and then come back and see what they have to say.
Lastly at the PDC Clemens said publicly that rows and columns suck and all you need in a database is a PK field and an XML field. Looks like he changed his tune, at least on storage, we all can learn buddy.
“What you end up with are elements and attributes (infoset) for the data that flows across, services that deal with the data that flows, and rows and columns that efficiently store data and let you retrieve it flexibly and quickly.”