很难对我的问题有一个好的标题。 据我所知,适配器是为组件添加更多服务而不更改它。适配器可以扩展来自多个组件的服务。
但是组件之间的依赖关系呢?如何设置组件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
这是一个很好的实施吗?
答案 0 :(得分:1)
关键是,使用ZCA,不设置对具体对象的依赖关系。您改用实用程序。
对象A将实现一个接口,并在B中查找接口以查找具体实现,可能为A,但这取决于寄存器。
请注意,ZCA旨在允许您为给定的接口插入不同的实现,并不总是需要。
如果您的Task对象需要特定类型,那么请记录该类型。这里不要求使用ZCA。最多,您可以尝试将传入的值调整为IPerson
;如果传入的对象已经实现了该接口,则该操作是无操作:
class Task(object):
implements(ITask)
def __init__(self, owner):
self.owner = IPerson(owner)
这将允许您以后灵活地传递其他内容,不一个人本身,但可以适应该界面。