[Zope3-Users] Multiple containers in one object - how to implement
in Zope3?
Alek Kowalczyk
thealx at poczta.onet.pl
Mon Apr 3 01:56:59 EDT 2006
Jeff Rush napisał(a):
> Alek Kowalczyk wrote:
>> Florian Lindner napisał(a):
>>
>>> Am Samstag, 1. April 2006 15:15 schrieb Alek Kowalczyk:
>>>
>>>> I have a single object, which can contain many objects of 2 another
>>>> types (IType1, IType2). My intention is to have those objects
>>>> contained
>>>> in separate collections (because they are very different 2 types of
>>>> objects and should not be mixed in one collection)
>>>> I'd like to have each collection editable like Zope folder, i.e each
>>>> collection to be IContainer/BTreeContainer.
>
>>> why don't just create two subfolders (of type zope.folder) in you
>>> Container object, one for IType1, one for IType2?
>>>
>> Good idea, thanks! In the meantime I have made something similar, i.e
>> defined two more container types (IObjects1, IObjects2) and created
>> one IObjects1 and one IObjects2 in the IMasterObject's (which now is
>> also a IContainer) constructor .
>>
>> But now the new question follows: how to limit cardinality of items?
>> I want now to have one and exactly one IObjects1 and IObjects2
>> instance in IMasterObject. Is there some type of constraint defined,
>> similar to ItemTypeConstraint, for limiting number of elements of
>> specific type, or I should do it on my own by overriding __setitem__
>> and other methods?
>
> Alek, I do the same thing for a complex container with a fixed set of
> member sub-containers.
>
> IVenture("RUSH")
> ILedgerSet, name "ledgers"
> ILedgers
> ...
> IJournalSet, name "journals"
> IJournals
> ...
>
> http://sample.com/ventures/RUSH/ledgers/CASH
> http://sample.com/ventures/RUSH/journals/CHECKING
>
> The way to get what you want is to make IMasterObject *not* an
> IContainer but an IReadContainer.
>
> There are IWriteContainer and IReadContainer which are sub-interfaces
> of IContainer.
>
> This way no one can ever add/remove those sub-containers. And
> (presumeably you're doing it now) you add those the instances of
> Objects1 and Objects2 at creation time of MasterObject, and then never
> again need to manipulate them.
>
> You should also place Container/Containee constraints on the IObjects1
> and IObjects2 so they cannot be created in inappropriate places, and
> of course omit their menu entries from the ZMI so they are not
> manually addable.
>
> -Jeff
>
Thanks Jeff! This is exactly what I wanted to :)
Warm Regards,
Alek
More information about the Zope3-users
mailing list