[Zope3-Users] Design question (object or interface for category implementation?)

Bernd Dorn zope-mailinglist at mopa.at
Tue Mar 6 15:36:54 EST 2007


On 06.03.2007, at 18:54, Christophe Combelles wrote:

> Hi,
>
> I'm playing again with the notion of categories of objects.
>
> I have two main goals:
> ---------------------
> 1) I must let the user choose the category of an object added to  
> the zodb. For this, I must be able to retrieve the list of  
> categories and present them in a form field managed by a vocabulary  
> (or in a different manner).
> 2) I must have different behaviours for categorized objects:
> objects of different categories would have different views,  
> different addMenuItems (if they are containers), etc.
>
> the first requirement would tell me to define categories as  
> objects, while the second one would tell me to define them as  
> interfaces.
>
> The possible solutions I see:
> ----------------------------
>
> 1) The simplest solution is to store the categories as text strings  
> into the annotations of the object. So categories actually are just  
> tags.
>
> 2) The second solution is to do the same, but replace text strings  
> with category objects, that implement ICategory. And categories can  
> be stored separately in a category container, or in a registered  
> utility that gives the list of available categories. This is a bit  
> better, but this way I don't know how to easily let my categorized  
> objects behave differently according to their categories.
>
> 3) The third solution is to define categories as interfaces  
> extending ICategory. I can retrieve the list of categories with  
> ICategory.dependents
> But to present them in a form, I must have a pretty name for each  
> interface. Should I store them in a Tagged Value?
>
> 4) The fourth solution I see, is to define an interface type,  
> ICategoryType, extending IInterface just like IContentType. Then my  
> categories would be interfaces whose type is ICategoryType. But  
> with IContentType, is there a way to retrieve the list of all  
> available content types?

imho 4) is the best solution, just take a look at zope.app.content to  
see how to get the vocabulary and the inspection implementation of  
objects

you can then set the interface on objects by using  
zope.interface.alsoProvides

regards, Bernd

> Do you have some advice on the subject?  Am I asking the wrong  
> questions? Is there an obvious solution I've not seen? Am I going  
> too far and should I rather keep it simple and stupid?
>
>
> regards,
> Christophe
>
>
>
>
>
>
>
> _______________________________________________
> Zope3-users mailing list
> Zope3-users at zope.org
> http://mail.zope.org/mailman/listinfo/zope3-users



More information about the Zope3-users mailing list