de Bhavya Karia

Introducere

În Inginerie software, injectarea dependenței este o tehnică prin care un obiect (sau o metodă statică) furnizează dependențele unui alt obiect. O dependență este un obiect care poate fi folosit (a serviciu).

Aceasta este definiția Wikipedia, dar totuși, dar nu este ușor de înțeles. Deci, să o înțelegem mai bine.

Înainte de a înțelege ce înseamnă în programare, să vedem mai întâi ce înseamnă în general, deoarece ne va ajuta să înțelegem mai bine conceptul.

Dependența sau dependența înseamnă să te bazezi pe ceva pentru sprijin. Ca și dacă spun că ne bazăm prea mult pe telefoanele mobile, înseamnă că suntem dependenți de ele.

Deci, înainte de a ajunge la injecții de dependență, mai întâi să înțelegem ce înseamnă o dependență în programare.

Când clasa A folosește unele funcționalități din clasa B, atunci se spune că clasa A are o dependență de clasa B.

ad-banner
O introducere rapida la injectia de dependenta ce este si
Se afișează dependențe între clase

În Java, înainte de a putea folosi metode din alte clase, trebuie mai întâi să creăm obiectul acelei clase (adică clasa A trebuie să creeze o instanță din clasa B).

Deci, transferul sarcinii de a crea obiectul către altcineva și utilizarea directă a dependenței se numește injecție de dependență.

O introducere rapida la injectia de dependenta ce este si
Ce se întâmplă dacă codul ar putea vorbi?

De ce ar trebui să folosesc injecția de dependență?

Să presupunem că avem o clasă de mașini care conține diverse obiecte precum roți, motor etc.

Aici clasa de mașini este responsabilă pentru crearea tuturor obiectelor de dependență. Acum, dacă ne hotărâm să renunțăm MRFWheels în viitor și doriți să utilizați Yokohama Roți?

Va trebui să recreăm obiectul mașinii cu o nouă dependență Yokohama. Dar când folosim injecția de dependență (DI), putem schimba roțile în timpul rulării (deoarece dependențele pot fi injectate în timpul rulării, mai degrabă decât în ​​timpul compilării).

Vă puteți gândi la DI ca intermediarul din codul nostru, care face toată munca de a crea obiectul roților preferat și de a-l furniza clasei Auto.

Acesta face ca clasa noastră de mașini să fie independentă de crearea obiectelor de roți, baterie etc.

În principiu, există trei tipuri de injecție de dependență:

  1. injecție constructor: dependențele sunt furnizate printr-un constructor de clase.
  2. injecție setter: clientul expune o metodă de setare pe care injectorul o folosește pentru a injecta dependența.
  3. injecție interfață: dependența oferă o metodă de injecție care va injecta dependența în orice client transmis acestuia. Clienții trebuie să implementeze o interfață care expune un metoda setter care acceptă dependența.

Deci, acum este responsabilitatea injectării dependenței de a:

  1. Creați obiectele
  2. Știți ce clase necesită aceste obiecte
  3. Și le oferă toate acele obiecte

Dacă există vreo schimbare în obiecte, atunci DI se uită la ea și nu ar trebui să privească clasa care folosește acele obiecte. În acest fel, dacă obiectele se schimbă în viitor, atunci responsabilitatea DI de a furniza obiectele corespunzătoare clasei.

Inversiunea controlului – conceptul din spatele DI

Aceasta afirmă că o clasă nu ar trebui să își configureze dependențele în mod static, ci ar trebui configurată de o altă clasă din exterior.

Este al cincilea principiu al SOLID cinci principii de bază ale programării și proiectării orientate pe obiecte de către Unchiul Bob – care afirmă că o clasă ar trebui să depindă de abstractizare și nu de concreții (în termeni simpli, codificați greu).

Conform principiilor, o clasă ar trebui să se concentreze pe îndeplinirea responsabilităților sale și nu pe crearea obiectelor necesare pentru îndeplinirea acelor responsabilități. Și acolo este injectarea dependenței intră în joc: oferă clasei obiectele necesare.

Notă: Dacă doriți să aflați mai multe despre SOLID principiile unchiului Bob, atunci poți să te îndrepți spre asta legătură.

Avantajele utilizării DI

  1. Ajută la testarea unității.
  2. Codul plăcii cazanului este redus, deoarece inițializarea dependențelor se face de către componenta injectorului.
  3. Extinderea aplicației devine mai ușoară.
  4. Ajută la activarea cuplării libere, ceea ce este important în programarea aplicațiilor.

Dezavantaje ale DI

  1. Este un pic complex de învățat și, dacă este folosit în exces, poate duce la probleme de gestionare și alte probleme.
  2. Multe erori de timp de compilare sunt împinse în timp de execuție.
  3. Cadrele de injectare a dependenței sunt implementate cu reflecție sau programare dinamică. Acest lucru poate împiedica utilizarea automatizării IDE, cum ar fi „găsiți referințe”, „arătați ierarhia apelurilor” și refactorizarea sigură.

Puteți implementa injecția de dependență pe cont propriu (Pure Vanilla) sau puteți utiliza biblioteci sau cadre terțe.

Biblioteci și cadre care implementează DI

Pentru a afla mai multe despre injectarea dependenței, puteți consulta resursele de mai jos:

Injecție de dependență Java – Tutorial de exemplu pentru modelul de proiectare DI – JournalDev

Utilizarea injecției de dependență în Java – Introducere – Tutorial – Vogella

Inversia containerelor de control și modelul de injecție de dependență – Martin Fowler

Sper ca ajuta!

Dacă ți-a plăcut articolul și vrei să citești articole mai uimitoare, atunci urmărește-mă aici (Bhavya Karia) și arată-ți sprijinul, deoarece mă motivează să scriu mai mult.

Dacă aveți întrebări sau feedback pentru mine, să ne conectăm LinkedIn, Twitter, Facebook.

Editați 1:

Mulțumită lui Sergey Ufocoder acum acest articol a fost convertit în limba rusă. Prietenii mei ruși și care toți pot citi limba rusă o citesc.

Link către articol

De asemenea, dacă doriți să aplicați DI în JavaScript și căutați o bibliotecă, atunci Jo Surikat vă sugerează să încercați biblioteca sa.

Di-Ninja

Încă o minunată bibliotecă DI în JavaScript a fost sugerată de Nicolas Froidure.

cuțit

Editați 2:

Dacă sunteți dezvoltator PHP, atunci nu vă faceți griji, v-ați acoperit și pe toți. Gordon Forsythe a recomandat această uimitoare bibliotecă pe care ați putea dori să o încercați.

auryn

Mulțumesc pentru toate cuvintele amabile pe care le-am primit. Împărtășiți articolul, astfel încât să poată beneficia din ce în ce mai mulți oameni.

Dacă ați învățat chiar și un lucru sau două, vă rugăm să împărtășiți această poveste!