L'iniezione circolare delle dipendenze è una buona pratica?

1

Sto provando il pattern di Iniezione di dipendenza in alcune nuove classi, più specificamente in un Sistema di Transazioni e sono incappato in un dilemma. Ho una classe Person con un metodo create_new_transaction e una classe Transaction per rappresentare ogni mia transazione.

Come il pattern dice che inietto la transazione di classe nel costruttore. Ma volevo anche iniettare gli oggetti originator e receiver nella classe Transaction in modo da poter accedere al loro nome pubblico e ai parametri dell'account. Sto danneggiando il design implementandolo? Questo sta creando un alto accoppiamento tra queste due classi?

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)
    
posta cllamach 13.02.2015 - 00:50
fonte

1 risposta

4

Ogni volta che qualcuno dice "Circular Dependency", rabbrividisco. Vedo come un problema sul design. DI è indipendente dalla dipendenza circolare.

In effetti stai creando un accoppiamento tra le due classi. È necessario? In generale, non ci credo. Penso che tu stia dando troppa responsabilità alla classe Person. Pertanto, stai danneggiando il design. Solo la persona può avviare transazioni? In qualsiasi momento un'entità diversa sarà la fonte o la destinazione di una transazione (ad es. Un'azienda)?

Dipenderà da quali sono i requisiti esatti e il dominio in cui stai lavorando. Ma avrei qualcos'altro che creava la transazione (classe Bank, o classe Dealer, o qualcosa del genere)

    
risposta data 16.02.2015 - 12:47
fonte

Leggi altre domande sui tag