Hi Bene,

thanks a lot for following up the discussion, much more than appreciated :)

> * The xml module has dependencies to digister. This should be removed if 
> possible

What I don't like is not the Digester dependency itself, but rather
the fact that:

 * The XML config module *exposes* Digester APIs - the contract should
work strictly to chain configuration APIs, it should have nothing to
do with the underlying implementation;

 * The configuration module relies on the ConfigParser#parse() method
behaviour, and returns nothing - that means that 2 different parsers
could actually behave in 2 different way, switching from/to different
chain textual representations is potentially broken;

 * Actually only the Config parse operation is available - I honestly
think it would be really helpful having a component able also to dump
a Chain/Catalog configuration - for that purpose I started exploring
Codehaus Modello[1], which is the generator used in Apache Maven; I am
not sure if it will give us the solution for that problem, but giving
a try shouldn't hurt

> * Base classes of the API are currently in o.a.c.c.core.impl package. This is 
> awkward, because the base classes really belong to the API. I came across 
> this issue while trying to create a test for o.a.c.c.Chains. I'm not able to 
> use ChainBase in that test because it is in another module (the core module).
>
> As a first step for me to get used to the API, I'd like to to move convenient 
> base classes like ChainBase and CommandBase to the API package. WDYT?
>

I am honestly against that proposal for the following reasons:

 * the `api` module just express the Chain contract and has nothing to
do how chains are implemented - think about java.util.List and all
implementations: of course, the JVM provides default implementations,
but nothing prevents users can provide java.util.List implementations
that backs data on the file system;

 * not necessarily users have to rely on our chain/commands
implementation; having a clear separation between APIs and
implementation - and ours is just _one_ implementation, not _the_
implementation - allow users compose their system including just what
they need;

 * thinking in therms of OSGi (a topic you like, IIUC) bundles: in a
running system, you can upgrade/switch chain bundle implementations
without the need of updating the APIs bundles. Yes, it can be done
somehow as well with monolith bundles, but having a more fine grained
modules, really improve the OSGi experience.

> Another point to consider is renaming o.a.c.chain2.generic. When reading a 
> package name like this I would expect that it has something to do with java 
> generics.
> But instead it contains "concrete implementations of generic commands". I'd 
> rename this package to o.a.c.chain2.common or something like that.

+1 this is something we inherited from previous chain version, feel
free to fill an issue and provide the resolution.

Thanks a lot for the followup, have a nice weekend!
Alles Gute! :)
-Simo

[1] http://modello.codehaus.org/index.html

http://people.apache.org/~simonetripodi/
http://twitter.com/simonetripodi

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to