Sto cercando di capire meglio i pro / contro dell'istanziazione rispetto all'iniezione in uno sviluppo di tipo di applicazione web.
- Quali sono i pro e amp; contro per ciascuno?
- Quando dovrebbero essere usati (che tipo di scenario stiamo guardando)?
1. pros: testabilità, configurazione esterna dell'implementazione per client piuttosto che implementazione "in the code" (pensa se / else se per ogni nuovo client). la logica è astratta via
contro: aggiunge complessità, la logica viene sottratta
2. Dovresti iniettare implementazioni "comportamentali" che possono avere varianza basata sull'implementazione o sull'ambiente. Le cose che non cambiano potrebbero essere istanziate
Risposta a lungo termine: L'iniezione ti dà la massima flessibilità di configurazione di implementazioni / istanze concrete. È uno strato di astrazione che ti consente di definire i "comportamenti" delle implementazioni (i dettagli) in modo da poter costruire l'intera app in base alle aspettative. Quindi è possibile configurare gli "adempimenti" di tali aspettative.
Il client A utilizza il database SQL, il client B utilizza il database Oracle.
Il client A chiama un metodo: pubblico Utente GetUserByID (int id)
Il client B chiama un metodo: pubblico Utente GetUserByID (int id)
se creiamo un'interfaccia che contiene qualcosa come:
public interface IUserServices{
User GetUserByID(int id)
}
Possiamo usare un iniettore per configurare quale implementazione usare. qualcosa di simile all'avvio di app per il client A:
Bind<ClientA_UserServices>.To<IUserServices>();
e per il cliente B:
Bind<ClientB_UserServices>.To<IUserServices>();
e nell'app:
public class DoSomethingWithUserService{
IUserServices _svc;
public DoSomethingWithUserService(IUserServices svc)
{
_svc = svc;
}
public void doSomething()
{
User theUser = _svc.GetUserByID(User.ID);
}
}
ora, inoltre, ora è possibile testare unitamente DoSomethingWithUserService e inoltrare un IUserServices di implementazione di test che può utilizzare dati di test statici o dati Mock.
Leggi altre domande sui tag dependency-injection