了解Zope组件体系结构和组件依赖性

时间:2012-10-12 14:20:03

标签: python zope zope.component

很难对我的问题有一个好的标题。 据我所知,适配器是为组件添加更多服务而不更改它。适配器可以扩展来自多个组件的服务。

但是组件之间的依赖关系呢?如何设置组件A(Person)和组件B(Task)之间的依赖关系,就像这个普通的Python代码

一样
class Person:
 pass

class Task:
 def __init__(self, person):
  self.owner = person

如果我实现了2个类

from zope.interface import Interface
from zope.interface import implements

class IPerson(Interface):
 pass

class Person(object):
 implements(IPerson)

class ITask(Interface):
 pass

class Task(object):
 implements(ITask)
 def __init__(self, person):
  self.owner = person

这是一个很好的实施吗?

1 个答案:

答案 0 :(得分:1)

关键是,使用ZCA,设置对具体对象的依赖关系。您改用实用程序。

对象A将实现一个接口,并在B中查找接口以查找具体实现,可能为A,但这取决于寄存器。

请注意,ZCA旨在允许您为给定的接口插入不同的实现,并不总是需要。

如果您的Task对象需要特定类型,那么请记录该类型。这里不要求使用ZCA。最多,您可以尝试将传入的值调整为IPerson;如果传入的对象已经实现了该接口,则该操作是无操作:

class Task(object):
    implements(ITask)

    def __init__(self, owner):
        self.owner = IPerson(owner)

这将允许您以后灵活地传递其他内容,一个人本身,但可以适应该界面。