Just to jump in. I don't really see the limitation with the current ContinuumStore object. In fact, I would say the only real issue I see around it is that too many components are dependent upon it which makes Continuum somewhat database-centric. In most cases these components are just using it to pass parameters to each other in an indirect way and don't actually need to be updating or hitting the database over and over again.

To my eyes, it seems that everything from the BuildController down doesn't actually need a store of any kind. So far it seems everything under that Component just needs the exact same instance of Project, BuidDefinition and BuildResult. All those objects could be wrapped into a new object BuildTask (or something similar) which could be a standard part of the context map sent into any build- related actions. Then several references to the ContinuumStore could be removed.

There are some components below the BuildController that rely upon the ConfigurationService which needs the ContinuumStore to grab the SystemConfiguration object, but I would say maybe its a bit of a false assumption that the SystemConfiguration is stored in the same place where the Project and BuildDefinition information is stored. That is to say, if there is more than one system building the same set of projects (as in a distributed build system) the SystemConfiguration for each build agent will likely not be stored on the master build system serving as the definitive source of Project and BuildDefinition information.

To summarize my thoughts:

1. One big ContinuumStore is fine as you are likely to have only one database and it makes it really clear what components are database-aware. Continuum doesn't have 50+ tables (data objects) so taking the EJB approach and having one DAO (EJBHome) per table is not really necessary. It gives you that nice organized feeling to have it broken up into small tiny pieces, but it doesn't help with maintenance as a change to the database is universal and affects everything. It also would make implementing a new store an arduous task. This part is purely anecdotal, so take it with a grain of salt, but those small DAO classes tend to fill up with application logic over time and eventually become irreplaceable.

2. Using the store to pass parameters is a no-no and needless dependence on the store is bad for components you may wish to reuse in a distributed system.


-David


On Dec 15, 2005, at 2:43 PM, John Casey wrote:

While I do like the idea of splitting up any monolithic code in the DefaultContinuum class, I don't support splitting data-access code from itself.

IMO, breaking data-access stuff by model-class is asking for trouble, since it doesn't allow a good mapping of data-access functions for managing relationships between multiple model classes. It think we can still gain a lot by separating the DAO stuff into a small number of DAO classes (maybe only one? definitely not one-per-model-class), and separating other bits of logic into coherent classes that are controlled by the DefaultContinuum class. For DAOs we need to avoid both the case where all DAO functions are stuffed in a single class Just Because - making it hard to maintain by sheer size - and the case where DAO functions dealing with object-object relations is shoved into a class where it doesn't make sense (i.e. on one of the classes' DAOs and not the other).

-j

Trygve Laugstøl wrote:
On Wed, 2005-12-14 at 14:58 -0800, Carlos Sanchez wrote:
On 12/14/05, Trygve Laugstøl <[EMAIL PROTECTED]> wrote:
I still disagree with splitting up the ContinuumStore into a set of
DAOs. I've never seen the advantage of having a single DAO for each
domain object.
They will be reusable in other applicaitons. If we're thinking about
creting other applications, like repository manager, we'll share a lot
of common objects between them.
I have yet to see an example of this idea working in real life. I
understand that you'd want to manage different sets of objects, but like in Continuum the Project and Build objects are to tightly coupled that you can't possibly store Project objects in one database and the Build
objects in another.
--
Trygve


Reply via email to