web-dev-qa-db-ja.com

循環依存性注入は良い習慣ですか?

私はいくつかの新しいクラス、より具体的にはトランザクションシステムで依存性注入パターンを試していて、ジレンマに遭遇しました。 create_new_transactionメソッドを持つPersonクラスと、各トランザクションを表すTransactionクラスがあります。

パターンが指示するように、コンストラクターにクラストランザクションを挿入します。ただし、発信者オブジェクトと受信者オブジェクトをTransactionクラスに挿入して、それらのパブリック名とアカウントパラメーターにアクセスできるようにしたかったのです。これを実装することでデザインを傷つけていますか?これにより、これら2つのクラス間に高い結合が生じていますか?

class Transaction(object):

      def __init__(self, amount, from_person, to_person):
          self.from = from_person
          self.to = to_person


class Person(object):

     def __init__(self, name, transaction=Transaction):
         self._transaction = transaction
         self.name = name

     def create_new_transaction(self, amount, destiny):
         return self._transaction(amount, from_person=self, to_person=destiny)
1
cllamach

誰かが「循環依存」と言うときはいつでも、私は身震いします。デザインの問題だと思います。 DIは循環依存に依存しません。

あなたは確かに2つのクラス間の結合を作成しています。必要ですか?一般的なケースとして、私はそうは思わない。あなたはPersonクラスにあまりにも多くの責任を与えていると思います。したがって、あなたはデザインを傷つけています。個人のみがトランザクションを開始できますか?いつでも別のエンティティがトランザクションのソースまたは宛先になりますか(会社など)?

正確な要件と、作業しているドメインによって異なります。しかし、私はトランザクションを作成する何か他のものを持っているでしょう(銀行クラス、またはディーラークラス、またはそのようなもの)

4
Miyamoto Akira