[Zope] Organisational vs. Functional hierarchies

bruno modulix bruno at modulix.org
Tue Apr 19 12:43:30 EDT 2005


David Given wrote:
> I apologise if this is a newbie question, but I can't seem to find
> anything in the documentation about this.
> 
> The way Zope seems to want to organise things is so that folders roughly
> equate to classes. 

Nope.

> That is, if I have B inside A, then B inherits its
> behaviour from A. 

B acquire part of its behavior from A. But acquisition is not only by 
containment, it's also by context.

> All of B's siblings are the same sort of object.

Why do you have this strange idea ?

> However, this means that I have to seperate all my various types of
> object by kind, regardless of whether they're related.

Not at all. The most obvious think to do is to put your objects where 
they belongs - that is, use the ZODB hierarchie like you'd use a plain 
filesystem for a static site.

> Let's say I have a site that talks about flowers. I have two main kinds
> of object: images of flowers, which support methods for scaling etc, and
> descriptions of flowers, which support methods for rendering in various
> interesting ways. I have to arrange things like this:
> 
> /
>   Text
>     HistoryOfTheDaisy
>     MoreInformationAboutDaisies
>     HowToGeneticallyEngineerRoses
>     MyFavouriteRoseStories
>   Images
>     WildDaisy
>     DomesticatedDaisy
>     MutatedDaisyFromBeyondTimeAndSpace
>     FakePictureOfABlackRose
> 
> This works, but is a bit icky. I have my daisies mixed in with my roses.
> 
> It would be far more convenient for organisational purposes if I
> arranged things like this:
> 
> /
>   Daisy
>     Text
>       HistoryOfTheDaisy
>       MoreInformationAboutDaisies
>     Images
>       WildDaisy
>       DomesticatedDaisy
>       MutatedDaisyFromBeyondTimeAndSpace
>   Rose
>     Text
>       HowToGeneticallyEngineerRoses
>       MyFavouriteRoseStories
>     Images
>       MutatedDaisyFromBeyondTimeAndSpace
>       FakePictureOfABlackRose
> 
> But to make this work, I need to duplicate all the code in each 'Text'
> and 'Images' folder...

Nope. The most obvious thing to do is : put that code in your root 
folder. Now everyone will acquire it, and you'll be a happy webmaster. 
(unless of course there are name clashes somewhere !-)


> Is it possible to tell Zope that methods for a particular kind of object
> should be found at a particular location, regardless of the containment
> hierarchy? 

0/ Put all your code in the root folder and use acquisition by 
containment. Q&D, but proven to work.

1/ add (in the root folder, or anywhere on top of your Flowers) a folder 
for each 'type of object', put the 'methods' in, and use acquisition by 
context:

text_methods
   dothis
   dothat

image_methods:
   dosomething
   dosomethingelse

Then calls like:
Rose/Text/MyFavouriteRoseStories/text_methods/do_this

Should work. But I would not do it (at least for your exemple).


2/ Write a product for your object types. Here it could be a Flower 
object, extending Folder so you can put texts and images in, and having 
all the code needed for your texts and images.

> Is this in fact possible, or do I need to start tinkering with custom
> products?

Anyway, you *should* write your own Products - and for this kind of 
things, it's pretty easy.

-- 
Bruno Desthuilliers
Développeur
bruno at modulix.org


More information about the Zope mailing list