Qual è la differenza tra il modello di strategia e l'iniezione di dipendenza?

2

Stavo leggendo " Beginning Spring " e questo particolare paragrafo ha attirato la mia attenzione:

The DI pattern resembles other patterns such as Factory or Strategy. We can say that with the Factory pattern the instantiation of objects is still within the responsibility of the Factory definition, which is your code, but with the DI it’s externalized to another component/framework. On the other hand, with the Strategy pattern, the current implementation gets replaced with the help of multiple objects of a same interface, which contain that implementation inside. However, with the DI, the objects that contain those implementations are wired regardless of the implementation defined.

Non sono sicuro di capire cosa dice l'autore nella parte enfatizzata , ma leggere questo mi ha fatto capire che Strategy Pattern è un'implementazione di Inversion of Control, no? (Q1)

Quindi la mia seconda domanda (Q2) è: come è diverso il Pattern della strategia rispetto all'iniezione delle dipendenze?

    
posta Koray Tugay 08.09.2017 - 19:20
fonte

2 risposte

1

Il modello strategico, in poche parole, sta fornendo la possibilità di specificare un comportamento concreto per qualcosa in modo che il consumatore possa ignorare quale comportamento concreto. Un esempio è qualcosa come una strategia di registrazione. La cosa che fa il logging non interessa dove i messaggi di log vanno.

Iniezione di dipendenza è l'idea che le cose sono date le loro dipendenze piuttosto che cercarle.

Ci sono ancora scenari in cui il codice dovrebbe sapere come costruire la strategia che vogliono, o altrimenti dipendere direttamente dalle implementazioni della strategia. Sono poco comuni e meglio evitati, ma si spera che aiuti a distinguere i concetti ortogonali per te.

    
risposta data 08.09.2017 - 20:00
fonte
0

with the Strategy pattern, the current implementation gets replaced with the help of multiple objects of a same interface,

Sta provando a dire che se A sa come usare B perché A conosce l'interfaccia I che B implementa allora A può scambiare B per C così a lungo come C implementa anche I .

A--(I)-->B può essere facilmente modificato in A--(I)-->C

Lo schema strategico riguarda la possibilità di passare da uno all'altro in fase di esecuzione.

However, with the DI, the objects that contain those implementations are wired regardless of the implementation defined.

L'iniezione di dipendenza consiste nel fare A--(I)-->B , aspettandosi che alla fine qualcuno abbia bisogno di una funzione che ti farà creare C .

    
risposta data 09.09.2017 - 01:04
fonte

Leggi altre domande sui tag