The issue raised in 3 different current threads, so maybe it is better to talk about it in a new thread.

While creating more modules there is the case where we use many utility classes in our codebase.

The current ant build is by purpose organized in 4 layers:
- deployments
- functions
- libraries
- apis

Each layers module can only depends on modules in the underlying layers.

What layer a module belongs to is automatically recognized by looking at the module suffix.

Currently our utilities are "hosted" in library modules, and this make them useless to other library modules (utilities cannot be shared between libraries).

There is a long term plan of removing the utilities at all or to move them to external libraries (hosted by JAMES or as part of already existing Apache "Commons" libraries). My opinion is that similar plans tend to move attention/efforts to the wrong goal.

--------
PROPOSAL
--------

I propose that we introduce a new kind (or two) of module at the same level of the api module, so it would be:
- deployments
- functions
- libraries
- apis | commons | utils

The new modules MUST have no dependencies on other modules as for APIs but they are not API so having new types would help our refactoring in the short term.

I think this would also be useful to move some library code "down" to a common/util module because this automatically make it clear that the code have no dependencies on other servers libraries.

I see the need for:

deliverynotification code being discussed in "[server.trunk] introducing mail-library"

we then have some stream handling class, a security/digest class, maybe some encoding/decoding class having no dependencies and being used by unrelated code. My proposal is to put everything else in a single module as a first step, and evaluate next steps once we see what ended up inside the module.

Maybe "deliverynotification-util" and "common-util" are good names for the "-util" case, or "deliverynotification-common" and "util-common" are an alternative in the "-common" case.

ATM I would go with the -util suffix.


An alternative would be to use "-library" for the utilities (code with no dependencies) and "-impl" for current libraries (they often are implementations of stuff we have in -api modules). I don't have a strong opinion on the best solution, I just have a strong feeling that we need a fast/"easy to adopt" solution to accomplish a better modularization.

Opinions?

Stefano

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to