Andreas Hartmann schrieb: [...]
I already thought a lot about this issue, but I always arrive at one solution: We'd have to abandon the module dependencies, at least for the core modules. If each core module can access the APIs of all other core modules, it will become possible to leverage their functionality. OTOH, this would increase the danger of violating the separation of concerns, and therefore requiring a lot of discipline - we have to think twice before adding a certain functionality to a core module.
Another option would be to move the core module APIs - i.e. the functionality which shall be available across the whole application - back to the core. The corresponding modules would export only additional components and utilities (e.g., Cocoon components), which could be used by higher-level modules.
OTOH, we have to be very careful to put all non-API code in the private packages of the modules. Otherwise we'd risk the danger that the core grows very large again. I'd rather live with some code duplication in custom modules than with exposing too many implemenation classes.
This approach has already been taken for access control, observation, templating, and workflow. IMO it works very well. Other candidates are
search and linking. For search, we could introduce the package org.apache.lenya.cms.search containing the interface DocumentSearcher { Document[] find(Area area, Query query); } and maybe some helper classes to build queries. For linking, the API could contain the interfaces and classes Link LinkConverter LinkRewriter IncomingLinkRewriter OutgoingLinkRewriter ServletLinkRewriter UrlToUuidRewriter UuidToUrlRewriter LinkResolver LinkTarget LinkException The other classes should IMO not be part of the core API. -- Andreas -- Andreas Hartmann, CTO BeCompany GmbH http://www.becompany.ch Tel.: +41 (0) 43 818 57 01 --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]