Tutte le dipendenze devono essere create nel livello sottostante?

1

Dire che ho le seguenti classi:

ServiceLayer.Service > BusinessLayer.BusinessClass1 > BusinessLayer.BusinessClass2> BusinessLayer.BusinessClass3.

Nello scenario sopra; Il servizio chiama BusinessClass1, che chiama BusinessClass2, che chiama BusinessClass3.

Supponiamo che ciascuna delle classi abbia una dipendenza che deve essere iniettata:

IDependancy1 è richiesto da BusinessClass1 e dovrebbe essere iniettato dal costruttore; IDependancy2 è richiesto da BusinessClass2 e dovrebbe essere iniettato dal costruttore ecc.

Tutte le dipendenze dovrebbero essere create dal livello di servizio o la classe del livello aziendale dovrebbe creare le dipendenze utilizzate dalla classe che chiamano?

    
posta w0051977 14.06.2017 - 22:31
fonte

2 risposte

0

Avrei dichiarato le dipendenze e gestito nel punto più basso necessario. Cercherò anche di non avere una catena di responsabilità così lunga se possibile.

  • Quando costruisci, ServiceLayer.Service si preoccupa solo della sua interazione con BusinessLayer.BusinessClass1 e nient'altro. Non dovrebbe essere la responsabilità di ServiceLayer.Service di sapere qualcosa sui componenti interni di BusinessLayer.BusinessClass1 .
  • Durante il test, prendi in giro BusinessLayer.BusinessClass1 in modo da poter verificare che sia stato chiamato nel modo previsto. L'intera catena è irrilevante.
  • Segui la stessa tendenza per costruire e testare ciascun link in modo che rimangano indipendenti.

Quando lo fai, puoi refactificare BusinessLayer.BusinessClass1 in modo che non abbia più bisogno delle altre dipendenze e ServiceLayer.Service funzionerà ancora bene.

Se utilizzi uno dei tanti framework di dipendenze per le distribuzioni là fuori per gestirlo per te, questo è essenzialmente ciò che stanno facendo. Sarà il modo meno fragile per gestire il problema.

    
risposta data 14.06.2017 - 22:47
fonte
6

Should all of the dependencies be created by the service layer or should the business layer class create the dependencies that the class they call uses?

Idealmente, tutte le tue dipendenze sono create (in ordine) da la root di composizione .

Pensa alle tue dipendenze come a un grafico; non dovrebbero esserci dipendenze da cicli (non circolari)). Quindi la radice può iniziare semplicemente costruendo foglie, quindi gli oggetti che dipendono dalle foglie e così via fino a quando l'intero servizio / applicazione non è stato assemblato.

Uno dei vantaggi dell'iniezione del costruttore è che ogni oggetto documenta esplicitamente le dipendenze che devono essere soddisfatte.

    
risposta data 14.06.2017 - 22:50
fonte

Leggi altre domande sui tag