0

私の質問に適切なタイトルを付けることは非常に困難です。私が理解していることから、アダプターは、コンポーネントを変更せずに、コンポーネントにサービスを追加することです。アダプターは、複数のコンポーネントからサービスを拡張できます。

しかし、コンポーネント間の依存関係はどうですか? この通常の Python コードのように、コンポーネント A (人) とコンポーネント B (タスク) の間の依存関係を設定するにはどうすればよいですか?

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 に答える