Andreas Hartmann wrote:
> Hi Lenya devs,
> 
> first I have to say that Lenya 2.0 is starting to be real fun to work
>  with.

YEAH!

> As more standard capabilities have been added, it becomes much easier
> to add cool functionality:

:-D  i like cool functionality.

hell, i get itchy to start hacking lenya again. soon as i've (hopefully)
passed my master's exam (crafts, not academic :-D) in may, i'll be back
on track :)

> * 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.

sweet!

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

i think it's ok to compile core modules together. this should be marked
in the module.xml file somehow (like <depends class="messy"/> :-D).
i agree that some discipline is needed not to jeopardise the hard-won
structure we have now...

my first reaction was: it's ok for core modules to have (possibly
circular) interdependencies, but not for others. but what if users want
to introduce their own complex APIs that could introduce messy
dependencies? maybe they should also be able to define "groups" of
interdependent modules?

in short, if we introduce a mechanism to compile a group of module APIs
together, it should be generic and accessible to custom deployments as
well (even though we should make it very clear in the docs that people
should think twice before using this feature for their custom code).

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

i wonder: would it help users to introduce a more finely-grained module
structure? i don't mean new complicated semantics, just a directory-like
structure that helps people figure out what a module does and helps
implementers to focus on one particular thing and factor out stuff if
necessary. for example:

core-api
  (your list)
core-features
  acusecases
  administration
  development
  export
  inbox
  lenyadox
  linkcheck
  menubar
  migration
  sitemanagement
  sitetree
  sourcerepository
  svg
  usecase
  webdav
resource-types
  cforms
  collection
  contactform
  links
  news
  opendocument
  resource
  usecasedocument
  xhtml
editors
  common
  oneform
  forms
  bxe
  cforms
  fckeditor
  kupu
  neutron
  tinymce
  xopus
optional
  blog
  languageselector
  prettyprinting
  profiling

basically, this would be a voluntary thing, i.e. it makes no real
difference where you put a module, it's just to make it easier for
humans, and to gently push developers towards good modularisation.
we could put a readme into each "subtree" that explains what the modules
in there are about and how they talk to the outside world.

since there are no compile or runtime semantics involved, users would
still be free to combine an editor implementation with a resource type
in one module if they want.


-- 
jörn nettingsmeier

home://germany/45128 essen/lortzingstr. 11/
http://spunk.dnsalias.org
phone://+49/201/491621

Kurt is up in Heaven now.

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

Reply via email to