RichKucera?, on the XpMailingList:
Sometimes a Great Notation
- - - - - -The little tugboat of Test-first Discipline, cardboard fist with middle digit extended, duct-taped to the mast, visible from the river banks.
On one bank stands the various industry "container-lets": JSPs, servlets, orblets, EJBs, Droplets, JHTML, ASP, ActiveX Bean Bridges, session expiration call-back listeners, proprietary runtime services, various GUI models, etc.
On the other shore there are the Data Sources, Connections and Persistence Concerns--RDBMSs, ODBMSs, XML, ORDBMSs, Behemoth Financials Packages, LDAP servers, whatever--the Data Model and Information Sources.
Many fancy, large complicated tugs with flow analysis simulators and automated-log-tying are secured to Proprietary Docks at either side of the river. Uniformed operators on board, drooling in dishes of pizza-flavored cheese snacks.
Your little tug, with its two buttons, COMPILE and TEST, is towing thousands of Objects, all linked together in large collections. In radio contact, you have your highly agile, small auxiliary aluminum Exploratory Test-first Programming craft whizzing around, quite independent of any "project" or "release cycle", tweaking the large tow in various places, prying apart little jams before they're big jams. The tow is about a mile long.
The object model is independent of both shores. Discipline keeps the code testable, out of container-lets, and persistence concerns shoved far down into subclasses or mediated on an as needed basis, by a COTS mapping package, Toplink for example.
That is, to get your money's worth out of a package like Toplink, you develop your object model independent of persistence concerns, everything testable in the object layer, and separate persistence concerns to deal with later--map an attribute here and there, as needed. Everything goes much faster because the problem to be solved is clearer, that's where you get your money's worth.
Also, doing Persistence Mapping Later buys you the ability to *have* attributes at all, not to mention methods, if you can still remember how to write them. The notion of developing object model separate from data model has been "endorsed" by Giga, but the practicality of it is kind of lost with their articles. You'd lump in other information sources, such as LDAP, with the data model.
Fooey, you think, if only I had time to do this, now I'm going to have to
rename my stupid JDBCUserInfoSource class...
tests still broke from the last refactoring...put on Levee Breaks and see if you can get a Green Bar before the phase shifting kicks in...nope, going down, going down down