L'anno scorso ho creato un nuovo sistema usando Dependency Injection e un contenitore IOC. Questo mi ha insegnato molto su DI!
Tuttavia, anche dopo aver appreso i concetti e gli schemi corretti, lo considero una sfida per disaccoppiare il codice e introdurre un contenitore IOC in un'applicazione legacy. L'applicazione è abbastanza grande al punto che un'implementazione vera sarebbe schiacciante. Anche se il valore è stato compreso e il tempo è stato concesso. A chi è concesso tempo per qualcosa del genere ??
L'obiettivo ovviamente è portare unit test alla logica aziendale!
Logica aziendale che si intreccia con le chiamate al database che impediscono i test.
Ho letto gli articoli e capisco i pericoli dell'iniezione di dipendenza da uomo povero come descritto in questo articolo di Los Techies . Capisco che non disaccoppia davvero nulla.
Comprendo che può comportare molto refactoring a livello di sistema poiché le implementazioni richiedono nuove dipendenze. Non prenderei in considerazione l'utilizzo su un nuovo progetto di qualsiasi dimensione.
Domanda: Va bene usare il DI di Poor Man per introdurre la testabilità in un'applicazione legacy e iniziare a girare la palla?
Inoltre, usare il DI di Poor Man come approccio di base alla vera iniezione di dipendenza è un modo prezioso per educare sulla necessità e sui benefici del principio?
Riesci a refactoring di un metodo che ha una dipendenza dalle chiamate del database e un abstract che chiama dietro un'interfaccia? Il semplice fatto di avere tale astrazione renderebbe quel metodo testabile poiché un'implementazione simulata potrebbe essere trasmessa tramite un sovraccarico del costruttore.
Lungo la strada, una volta che lo sforzo ha guadagnato sostenitori, il progetto potrebbe essere aggiornato per implementare un container IOC e i costruttori sarebbero là fuori a prendere le astrazioni.
I consider it a challenge to decouple code and introduce an IOC container into a legacy application
certo che lo è. Si chiama debito tecnico. Questo è il motivo per cui prima di qualsiasi rinnovamento importante, è preferibile refactors piccoli e continui. Ridurre i principali difetti di progettazione e passare a IoC sarebbe meno impegnativo.