L'iniezione di dipendenza (DI) è un modello ben noto e alla moda. La maggior parte degli ingegneri ne conosce i vantaggi, come:
- Rendere possibile / semplice l'isolamento nei test unitari
- Definire esplicitamente le dipendenze di una classe
- Facilitare una buona progettazione ( ad esempio principio della responsabilità singola (SRP))
- Abilitazione rapida delle implementazioni di commutazione (
DbLogger
anzichéConsoleLogger
ad esempio)
Ritengo che ci sia un ampio consenso del settore sul fatto che DI sia un modello buono e utile. Non ci sono troppe critiche al momento. Gli svantaggi menzionati nella comunità sono generalmente minori. Alcuni di quelli:
- Aumento del numero di classi
- Creazione di interfacce non necessarie
Attualmente discutiamo di architettura con il mio collega. È abbastanza conservatore, ma di mentalità aperta. Gli piace mettere in discussione le cose, che considero buone, perché molte persone nell'IT copiano solo la tendenza più recente, ripetono i vantaggi e in generale non pensano troppo - non analizzano troppo in profondità.
Le cose che vorrei chiedere sono:
- Dovremmo usare l'iniezione delle dipendenze quando abbiamo una sola implementazione?
- Dovremmo vietare la creazione di nuovi oggetti tranne quelli di linguaggio / framework?
- L'iniezione di una singola implementazione è una cattiva idea (supponiamo di avere una sola implementazione, quindi non vogliamo creare un'interfaccia "vuota") se non prevediamo di testare un'unità di una determinata classe?
UserService
classe, è solo un detentore della logica. Viene iniettata una connessione al database e i test vengono eseguiti all'interno di una transazione che viene ripristinata. Molti chiamerebbero questa cattiva pratica ma ho scoperto che funziona molto bene. Non è necessario contorcere il codice solo per i test e si ottiene il potere di ricerca dei bug dei test di integrazione.