0

我的问题很难有一个好的标题。据我了解,Adapter 是在不改变组件的情况下,为组件添加更多的服务。适配器可以从多个组件扩展服务。

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

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

这是一个很好的实现吗?

4

1 回答 1

1

关键是使用 ZCA,您无需将依赖项设置为具体对象。您改为使用实用程序。

对象 A 将实现一个接口,您在 B 中查找该接口以找到一个具体的实现,它可能是 A,但这取决于寄存器。

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

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

class Task(object):
    implements(ITask)

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

这将允许您稍后灵活地传递其他东西,这些东西不是Person 本身,但可以适应该接口。

于 2012-10-12T14:24:07.367 回答