[Zope3-dev] What is ZCML?

Roger Ineichen dev at projekt01.ch
Sat Mar 25 10:10:35 EST 2006


What do you think about the following:

We have three concept in Zope 3 which are the real base for
Zope 3 as application server.

This are:

- python

- Zope components

- ZMCL

Each of them are well separated. Python is well documented,
Zope 3 is also good documented for a devleoper in it's
REAMDE.txt files and unit tests. And ZCML is sometimes pure
magic because of it's different intepretation what it should
be.

I'm a little worry about in what direction ZCML is going.

Right now we have two options. This are:

- ZCML as a registration layer.

- ZCML as a configuration layer.

What does this exactly mean? This are two targets of ZCML.
Some developer think ZCML should only register python defined
methods or classes and other think ZCML should configure
components which probalbly will need to register classes
driven from meta classes or similar thing.

The first concept "registration" can fully be done in python.
There is no need for doing it in ZCML. This way ZCML will
become a optional concept which also could be replaced by
"doing directly in python". If we are going in this direction
with ZCML I'm sure we don't reflect the "component" aspect of
Zope3 as a "Component Framework".

The second concept "configuration" offers ZCML as a standalone
concept and ensures that we only use ZCML as the glue for the
components. In this concept is the main target to offer a way
for reuse Zope3 components without to write additional python
code. The API is well defined in different metaconfigure files
and the relevant interfaces.


I think both concept has their benefit and also are not the
answer at all.

Right now ZCML is going in the direction of a "registration" layer
which will exclude the option to use ZCML as a "configuration" layer
and register components without to write additional python code.
This is bad.

Remember the initial target of ZCML. ZCML means "Zope Configuration
Markup Language" and was or is a concept which makes it possible to 
configure things.

The real question now is what are "things"?

Are "things":

- additional python classes or methods for configure components
or
- component iself

I think the base layers where we use in Zope 3 as a application server 
are: python --> zope component --> ZCML

And I also think:

Zope components are easy to handle because the are only based
on python and python offers the API which we understand.

ZCML could also be so easy if we respect ZCML as a real fully fnctional 
layer. Which offers the API defined in the different metaconfigure files.


But right now ZCML is going in a direction which requires to use
Zope components and python as layers. This I think is a fundamental
bad thing.

We abstract python in Zopes components and additional we get nice 
interfaces which makes it easy to follow and understand.

It could be so easy if we use ZCML as a layer for configure Zope 3 
components without to touch the python layer.

For me there is no reason strong enough that we should use the
python layer for configuration and registration in ZCML.


Some people think because it's easier for them to write additional
python classes or methods and use the existing python knowlegde
that this is enough reason to mix ZCML with python and Zope components.
Is this really a good concept? I donp't think so. Propably in the 
beginning, but how can we handle the complexity when we mix everything
with each other?

If we go in the direction of ZCML as a registration layer,
we have to change the model of our layers and we will get:

- python

- Zope components

- Zope registration components

- ZMCL


What do you think about that? Are I'm totaly wrong?


-- 
Regards
Roger Ineichen
_____________________________
Projekt01 GmbH
www.projekt01.ch
Boesch 65
6331 Hünenberg
phone     +41 (0)41 781 01 78
mobile    +41 (0)79 340 52 32
fax       +41 (0)41 781 00 78
email roger.ineichen at projekt01.ch
_____________________________
END OF MESSAGE


More information about the Zope3-dev mailing list