On 07.03.2007, at 01:32, Christophe Combelles wrote:
Bernd Dorn a écrit :
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
But with 4), I guess I won't be able to assign two categories onto
an object,
An object can have only one ContentType
this is not true an object can implement many interfaces so why
shouldnt it be possible to assign many subclasses of IInterface (or
did i m iss something?), use alsoProvides, not directlyProvides
I feel that 3) is easier, but I don't know how to assign an
retrieve a display name to interfaces.
A real example is the following:
-------------------------------
I want to define objects that represent Companies.
A company can be either a client, or a provider, or both,
or in the future it could be of another type.
When the user creates a company, it must choose "client",
"provider", or both.
The choice would assign a different interface to the object:
IClient, or IProvider, and this would lead to different views for
these objects.
So "client" and "provider" are categories of companies.
So I would tend to have:
class ICompany(Interface)
class IClient(ICompany)
class IProvider(ICompany)
This is simple, but now how do I assign a name to these interface,
so that the user will choose between "Client" and "Provider", and
not between "IClient" and "IProvider"?
Is it feasible with Tagged Value ? Or with the "name" attribute in
the zope:interface ZCML declaration?
use the name attribute, skins in zope work the same way
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@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users
_______________________________________________
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users
_______________________________________________
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users