Dibyendu Majumdar wrote:

While most of the Derby code is well-behaved with respect to the rules above, there are occasions when the inter-module dependencies appear unsatisfactory. Here is a sample:

1) The org.apache.derby.iapi.reference package contains constants that go across the boundaries of the layers. I can see the rationale behind having a central location for reference data, but would it be better from a modularity perspective, for each of the layers to have its own reference data?

Not sure, it might make sense for some but not for others. One of the reasons for the central location was an easy way to sure that these reference classes were not included in the jar files. Since they are only intended to hold constants seeing if the jars included the reference package was a way to tell something wrong was going on.

2) A somewhat similar but different issue is that all the Stored Format Ids of all objects, regardless of layer, module, etc., is stored in org.apache.derby.iapi.services.io.StoredFormatIds. In this case, it is probably better to externalize this information and load it at system startup.

Not sure what you mean here, these are just constants so not sure what it means to load it at system startup. One issue with distributing information is ensuring that different modules do not define identical values in the same space. That's really the purpose of StoredFormatIds (and some similarly shared classes), to ensure a single allocation for each value.

I would like to submit patches to fix some of these and similar issues, but before doing so, would like to know if there are any violent objections to the general module interaction principles stated above.

I think it's going to be on a case by case basis. In general it sounds like a good idea, but it's good to state the advantages of what you are proposing and be open about any disadvantages.

Thanks,
Dan.

Reply via email to