Una rapida introduzione a Dependency Injection: cos’è e quando usarlo

di Bhavya Karia

Introduzione

Nell’ingegneria del software, dependency injection è una tecnica per cui un oggetto (o metodo statico) fornisce le dipendenze di un altro oggetto. Una dipendenza è un oggetto che può essere utilizzato (un servizio).

Questa è la definizione di Wikipedia ma ancora, ma non è particolarmente facile da capire. Quindi cerchiamo di capire meglio.,

Prima di capire cosa significa nella programmazione, vediamo prima cosa significa in generale in quanto ci aiuterà a capire meglio il concetto.

Dipendenza o dipendente significa affidarsi a qualcosa per il supporto. Come se dicessi che ci affidiamo troppo ai telefoni cellulari di quanto significhi che dipendiamo da loro.

Quindi, prima di arrivare alle iniezioni di dipendenza, prima capiamo cosa significa una dipendenza nella programmazione.

Quando la classe A utilizza alcune funzionalità della classe B, allora ha detto che la classe A ha una dipendenza della classe B.,

Mostrando le dipendenze tra le classi

In Java, prima di poter utilizzare metodi di altre classi, dobbiamo prima creare l’oggetto di quella classe (cioè la classe A deve creare un’istanza di classe B).

Quindi, trasferire il compito di creare l’oggetto a qualcun altro e utilizzare direttamente la dipendenza è chiamato dependency injection.

E se il codice potesse parlare?

Perché dovrei usare dependency injection?,

Diciamo che abbiamo una classe di auto che contiene vari oggetti come ruote, motore, ecc.

Qui la classe car è responsabile della creazione di tutti gli oggetti di dipendenza. Ora, cosa succede se decidiamo di abbandonare MRFWheels in futuro e vogliamo usare le ruote Yokohama?

Avremo bisogno di ricreare l’oggetto car con una nuova dipendenza Yokohama. Ma quando si utilizza dependency injection (DI), possiamo cambiare le Ruote in fase di runtime (perché le dipendenze possono essere iniettate in fase di runtime piuttosto che in fase di compilazione).,

Puoi pensare a DI come l’intermediario nel nostro codice che fa tutto il lavoro di creare l’oggetto ruote preferito e fornirlo alla classe di auto.

Rende la nostra classe di auto indipendente dalla creazione di oggetti di ruote, batteria, ecc.

Esistono fondamentalmente tre tipi di dependency injection:

  1. constructor injection: le dipendenze sono fornite attraverso un costruttore di classi.
  2. setter injection: il client espone un metodo setter che l’iniettore utilizza per iniettare la dipendenza.,
  3. interface injection: la dipendenza fornisce un metodo iniettore che inietterà la dipendenza in qualsiasi client passato ad esso. I client devono implementare un’interfaccia che esponga un metodo setter che accetta la dipendenza.

Quindi ora è responsabilità dell’iniezione di dipendenza:

  1. Creare gli oggetti
  2. Sapere quali classi richiedono quegli oggetti
  3. E fornire loro tutti quegli oggetti

Se c’è qualche cambiamento negli oggetti, allora DI lo esamina e non dovrebbe riguardare la classe che usa quegli oggetti., In questo modo se gli oggetti cambiano in futuro, allora è responsabilità DI DI fornire gli oggetti appropriati alla classe.

Inversione del controllo —il concetto alla base di

Questo afferma che una classe non dovrebbe configurare staticamente le sue dipendenze ma dovrebbe essere configurata da qualche altra classe dall’esterno.

È il quinto principio di S. O. L. I. D — i cinque principi di base della programmazione orientata agli oggetti e del design di Uncle Bob-che afferma che una classe dovrebbe dipendere dall’astrazione e non dalle concrezioni (in termini semplici, hard — coded).,

Secondo i principi, una classe dovrebbe concentrarsi sull’adempimento delle proprie responsabilità e non sulla creazione di oggetti che richiede per adempiere a tali responsabilità. Ed è qui che entra in gioco l’iniezione di dipendenza: fornisce alla classe gli oggetti richiesti.

Nota: Se vuoi conoscere i principi SOLIDI di Uncle Bob, puoi andare a questo link.

Vantaggi dell’utilizzo di DI

  1. Aiuta nei test unitari.
  2. Il codice della piastra della caldaia viene ridotto, poiché l’inizializzazione delle dipendenze viene eseguita dal componente dell’iniettore.,
  3. Estendere l’applicazione diventa più facile.
  4. Aiuta ad abilitare l’accoppiamento allentato, che è importante nella programmazione delle applicazioni.

Svantaggi di DI

  1. È un po ‘ complesso da imparare e, se abusato, può portare a problemi di gestione e altri problemi.
  2. Molti errori di compilazione vengono spinti al run-time.
  3. I framework di iniezione delle dipendenze sono implementati con la riflessione o la programmazione dinamica. Ciò può ostacolare l’uso dell’automazione IDE, come “trova riferimenti”, “mostra gerarchia delle chiamate” e refactoring sicuro.,

È possibile implementare dependency injection da soli (Pure Vanilla) o utilizzare librerie o framework di terze parti.

Librerie e framework che implementano DI

  • Spring (Java)
  • Google Guice (Java)
  • Dagger (Java e Android)
  • Castle Windsor (. NET)
  • Unity(.,NET)

Per saperne di più su di iniezione di dipendenza, è possibile controllare le risorse di seguito:

Java Dependency Injection — DI Progettazione Esempio di Pattern Tutorial — JournalDev

l’Utilizzo di dependency injection in Java — Introduzione — Tutorial — Vogella

Inversione di Contenitori di Controllo e l’Iniezione di Dipendenza modello — Martin Fowler

Speranza che aiuta!

Se ti è piaciuto l’articolo e vuoi leggere articoli più sorprendenti, allora seguimi qui (Bhavya Karia) e mostra il tuo sostegno mentre mi motiva a scrivere di più.,

Se avete domande o commenti per me che cerchiamo di collegare su LinkedIn, Twitter , Facebook.

Modifica 1:

Grazie a Sergey Ufocoder ora questo articolo è stato convertito in lingua russa. I miei amici russi e che tutti possono leggere la lingua russa fanno dare una lettura.

Link all’articolo

Inoltre, se vuoi applicare DI in JavaScript e stai cercando una libreria, Jo Surikat suggerisce di provare la sua libreria.

Di-Ninja

Un’altra fantastica libreria DI in JavaScript è stata suggerita da Nicolas Froidure.,

knifecycle

Edit 2:

Se sei uno sviluppatore PHP, non preoccuparti, ti ho coperto anche tu. Gordon Forsythe ha raccomandato questa fantastica libreria che tutti voi potreste voler provare.

auryn

Grazie per tutte le gentili parole che ho ricevuto. Non condividere l’articolo in modo che sempre più persone possono essere beneficiato.

Share

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *