[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