Instantiating vs Injection

3

Sto cercando di capire meglio i pro / contro dell'istanziazione rispetto all'iniezione in uno sviluppo di tipo di applicazione web.

  1. Quali sono i pro e amp; contro per ciascuno?
  2. Quando dovrebbero essere usati (che tipo di scenario stiamo guardando)?
posta Aeseir 06.12.2017 - 00:36
fonte

1 risposta

3

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.

    
risposta data 06.12.2017 - 01:30
fonte

Leggi altre domande sui tag