Hi Lenya devs,

first I have to say that Lenya 2.0 is starting to be real fun to work with. As more standard capabilities have been added, it becomes much easier to add cool functionality:

* The meta data indexing made it possible to implement an image search in one or two hours - not by filtering, but by using a query which looks only for images. This could also be very valuable for asset management functionality (i.e., the "Insert Image" usecase).

* The "Persistable" interface together with the meta data indexing allows us to store outgoing links in the meta data when a document is saved. This makes it possible to use Lucene to find potential broken links before deactivating a document. This will make the "Deactivate" GUI much faster. I'm currently working on this.


During this implementation I noticed a major drawback of our current modularization approach. Since circular dependencies are prohibited, it's virtually impossible to use other core modules to implement a certain core functionality. A typical example is the usecase module. It depends on some other modules, for instance the ac (access control) module. Since there are also access control related usecases (login, logout), they had to be put in a separate acusecases module to avoid a circular dependency.

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.

IMO the current partitioning in core and "other" modules is not very appropriate. A major question is: Does the usecase framework belong in the core? If we intended a strictly layered architecture, the GUI classes shouldn't be part of the core. In this case, the partitioning might look like this:

Core Modules (without usecases and other GUI classes)
------------
ac, cache, i18n, janitor, ldap, linking, lucene (or search?), metadata, monitoring, notification, observation, properties, templating, workflow

Other Modules
-------------
acusecases, administration, blog, bxe, cforms, collection, contactform, development, editors, export, fckeditor, inbox, kupu, languageselector, lenyadoc, linkcheck, links, menubar, migration, neutron, news, opendocument, prettyprinting, profiling, resource, simplesite, sitemanagement, sitetree, sourcerepository, svg, tinymce, usecase, usecasedocument, webdav, xhtml, xopus

The usecases from the core modules could either be moved to the administration or sitemanagement modules or to their own modules (e.g., since the notification usecases are related to the inbox functionality, I'd suggest to extract them into a separate inbox module).


What are your opinions about this issue? TIA!

-- 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]

Reply via email to