[Zope-dev] Michel's Reply
Toby Dickenson
tdickenson@geminidataloggers.com
Fri, 20 Oct 2000 15:23:59 +0100
On Fri, 20 Oct 2000 12:54:19 +0100, Chris Withers <chrisw@nipltd.com>
wrote:
>>Consider the following passage in the documentation:
Noooooo - Context-based instance-space applications are a major source
of pain, bugs and security holes. They might be the one thing that
Zope does different (and therefore they need to be explained) but that
doesnt make them right.
>> Suppose 'feedHippo.py' is a Python Method. How could you call the
>> 'Diet/feed' method on the 'LargAnimals/Hippo' object from your
>> Python Method. Here's how::
>>
>> self.Zoo.Diet.LargeAnimals.hippo.feed()
>>
>> In other words you simply access the object using the same
>> acquisition path as you would use if calling it from the
>> web. Likewise in Perl you could say::
>>
>> $self.Zoo.Diet.LargAnimals.hippo->feed();
>>
>> Using methods from other methods is very similar to calling
>> methods from the web. The semantics differ slightly but the same
>> acquisition rules apply.
Thats fine until:
* someone adds an property named feed to an object at an intermediate
location in the containment heirarchy. This breaks the cron job that
calls self.Zoo.Diet.LargeAnimals.hippo.feed(), and all the hippos
starve.
* someone uses self.Zoo.Diet.buildings.visitor_reception.feed(), and
ends up filling the reception with hippo food. (This might even be
possible for someone who has no permissions on the reception object)
* someone wants to have a dinner party; feeding more than one animal
at once. But then he finds he has to switch to a different technique
because he cant call his dinner_party() method with more than one
context at the same time.
* someone uses
self.Zoo.buildings.office.printers.laserjet1.Zoo.Diet.LargeAnimals.hippo.feed(),
and ends up feeding paper to the hippo. (that could even be someone
who has no other permisions on that hippo object)
Ive now nearly finished converting all my newbie zope projects back to
a conventional O-O design. I have been bitten by all the problems
listed above. The feed method *should* *be* implemented in a ZooAnimal
base class.
Toby Dickenson
tdickenson@geminidataloggers.com