Prima di sostituire una semplice new
con l'iniezione di dipendenza, è necessario porsi "perché sto facendo questo?" ... "quale vantaggio reale ha?". Se la risposta è "Non so" o "niente", allora non dovresti.
In questo caso, non vedo alcun vantaggio reale nell'utilizzo di DI nei primi casi nel codice di esempio. Non c'è bisogno di nulla al di fuori di quel metodo per sapere come viene rappresentato l'insieme interno ... o anche per sapere che esiste.
L'altra domanda da porsi è se esiste un modo più semplice e più ovvio per raggiungere l'obiettivo. Ad esempio, lo scopo (più probabile) dell'utilizzo di DI per la variabile path
consiste nel consentire all'applicazione di utilizzare una classe diversa Path
. Ma il modo più semplice per farlo è passare un'istanza Path
al metodo dijkstra
come parametro esplicito. Potresti anche usare l'overloading per renderlo più appetibile; per esempio.
public Path dijkstra(Node startNode, Node endNode) {
return dijkstra(startNode, endNode, new Path());
}
public Path dijkstra(Node startNode, Node endNode, Path path) {
...
}
L'ultima cosa da considerare è che Di (in Java) comporta una riflessione a un certo livello, ed è inevitabilmente più costoso rispetto agli approcci classici di utilizzare new
o di fabbrica oggetti/metodi. Se non hai bisogno della flessibilità extra di DI, non dovresti pagare per questo.
Ho appena notato che le due variabili a cui si fa riferimento sono variabili locali. Non sono a conoscenza di alcun framework DI che consente di iniettare variabili locali ...
fonte
2012-12-19 02:19:03
http://stackoverflow.com/questions/1005473/must-dependency-injection-come-at-the-expense- di incapsulamento – sdasdadas