[Zope3-dev] zwiki: performance of findChildren()
Max M
maxm@mxm.dk
Sat, 26 Apr 2003 20:36:16 +0200
Jeremy Hylton wrote:
>class SoftwareProject(object):
>
> developers = Relation()
>
> def __init__(self, name):
> self.name = name
>
> def __repr__(self):
> return "%s(%r)" % (self.__class__.__name__, self.name)
>
>class Developer(object):
>
> projects = Relation()
>
> def __init__(self, name):
> self.name = name
>
> def __repr__(self):
> return "%s(%r)" % (self.__class__.__name__, self.name)
>
>many2many(SoftwareProject.developers, Developer.projects)
>
>zope3 = SoftwareProject("Zope3")
>jim = Developer("Jim Fulton")
>stevea = Developer("Steve Alexander")
>
>zope3.developers.add(jim)
>zope3.developers.add(stevea)
>assert stevea in zope3.developers
>assert zope3 in stevea.projects
>
Why put the relation in the object? Isn't it better to have a container
with different relations?
# a relation object (a graph) exists "self.relations.developers_projects"
class SoftwareProject(object):
def __init__(self, name):
self.name = name
def __repr__(self):
return "%s(%r)" % (self.__class__.__name__, self.name)
def developers(self):
return self.relations.developers_projects.get(self)
def add_developer(self, developer):
return self.relations.developers_projects.relate(self, developer)
class Developer(object):
def __init__(self, name):
self.name = name
def __repr__(self):
return "%s(%r)" % (self.__class__.__name__, self.name)
def projects(self):
return self.relations.developers_projects.get(self)
def add_project(self, project):
return self.relations.developers_projects.relate(self, project)
zope3.add_developer(jim)
zope3.add_developer(stevea)
assert stevea in zope3.developers()
assert zope3 in stevea.projects()