Bevezetés
A szoftvertechnikában a függőség-injektálás olyan technika, amelynek során az egyik objektum (vagy statikus módszer) biztosítja a másik objektum függőségeit. A függőség egy használható objektum (szolgáltatás).Ez a Wikipedia definíciója, de mégis, de nem különösebben könnyű megérteni. Szóval értsük meg jobban.
Mielőtt megértenénk, mit jelent a programozásban, először nézzük meg, mit jelent általában, mivel ez segít jobban megérteni a fogalmat.
A függőség vagy függőség azt jelenti, hogy valamire támaszkodunk a támogatásért. Mint ha azt mondanám, hogy túlságosan támaszkodunk a mobiltelefonokra, mint azt jelenti, hogy függünk tőlük.
Tehát mielőtt eljutnánk a függőségi injekciókhoz , először meg kell értenünk, mit jelent a programozás függősége.
Amikor az A osztály a B osztály valamilyen funkcióját használja, akkor azt mondta, hogy az A osztály B osztály függősége.

A Java-ban, mielőtt más osztályok módszereit használhatnánk, először létre kell hoznunk az adott osztály objektumát (azaz az A osztálynak létre kell hoznia egy B osztályú példányt).
Tehát az objektum létrehozásának feladatát másnak átadni és a függőség közvetlen használatát függőségi injekciónak nevezzük.

Miért használjam a függőségi injekciót?
Tegyük fel, hogy van egy autós osztályunk, amely különféle tárgyakat tartalmaz, például kerekeket, motort stb.
Itt az autóosztály felelős az összes függőségi objektum létrehozásáért. Mi van akkor, ha úgy döntünk, hogy a jövőben elárasztjuk az MRFKerekeket , és a Yokohama kerekeket akarjuk használni ?
Új autókobjektumot kell létrehoznunk egy új Jokohama-függőséggel. De a függőségi injektálás (DI) használatakor a kereket futás közben változtathatjuk meg (mivel a függőségeket futás közben, nem pedig fordítási időben lehet injektálni).
Gondolhat a DI-re, mint a kódunkban szereplő közvetítőre, aki minden munkát elvégez a preferált kerekek objektum létrehozásával és az autó osztály számára történő biztosításával.
Autóosztályunkat függetlenné teszi a kerekek, akkumulátorok stb.
Alapvetően háromféle függőségi injekció létezik:
- konstruktor injektálása: a függőségeket egy osztály konstruktoron keresztül biztosítják.
- szetter injekció: a kliens kitesz egy szetter módszert, amelyet az injektor a függőség injektálásához használ.
- interfész-injektálás: a függőség olyan injektor-módszert biztosít, amely a függőséget az általa továbbított bármely kliensbe injektálja. Az ügyfeleknek olyan interfészt kell megvalósítaniuk, amely egy olyan beállító módszert tesz elérhetővé, amely elfogadja a függőséget.
Tehát most a függőség-injekció felelőssége:
- Hozza létre az objektumokat
- Tudja meg, mely osztályok igénylik ezeket az objektumokat
- És biztosítsa nekik mindazokat a tárgyakat
Ha bármilyen változás történik az objektumokban, akkor a DI utánanéz annak, és ez nem vonatkozhat az adott objektumokat használó osztályra. Ilyen módon, ha az objektumok a jövőben változnak, akkor a DI feladata, hogy a megfelelő objektumokat megadja az osztálynak.
A vezérlés inverziója - a DI mögött álló koncepció
Ez azt állítja, hogy egy osztálynak nem szabad statikusan konfigurálnia a függőségeit, hanem kívülről más osztálynak kell konfigurálnia.
A SZILÁRD ötödik alapelve - azBob bácsi objektum-orientált programozásának és tervezésének öt alapelve - amely kimondja, hogy egy osztálynak az absztrakciótól kell függenie, és nem a konkretizációktól (egyszerű szóval, kemény kódolással).
Az alapelvek szerint az osztálynak a felelősségének teljesítésére kell koncentrálnia, nem pedig olyan tárgyak létrehozására, amelyekre e feladatok teljesítéséhez szükség van. És itt játszik szerepet a függőség-injektálás : ez biztosítja az osztály számára a szükséges tárgyakat.
Megjegyzés: Ha meg akarja ismerni a Bob bácsi SZOLID alapelveit, akkor erre a linkre léphet.
A DI használatának előnyei
- Segít az egység tesztelésében.
- A kazánlemez kódja csökken, mivel a függőségek inicializálását az injektor alkatrésze végzi.
- Az alkalmazás kiterjesztése könnyebbé válik.
- Segít lehetővé a laza összekapcsolást, ami fontos az alkalmazás programozásában.
A DI hátrányai
- Kicsit bonyolult megtanulni, és túlzott felhasználás vezetési problémákhoz és egyéb problémákhoz vezethet.
- Számos fordítási időhibát futási időre tolnak.
- A függőség-befecskendezési keretrendszereket reflexióval vagy dinamikus programozással valósítják meg. Ez akadályozhatja az IDE automatizálásának használatát, például a „hivatkozások keresése”, a „híváshierarchia megjelenítése” és a biztonságos újrakezdés.
A függőségi injekciót saját maga is megvalósíthatja (Pure Vanilla), vagy használhat harmadik fél könyvtárait vagy keretrendszereit.
A DI-t megvalósító könyvtárak és keretrendszerek
- Tavasz (Java)
- Google Guice (Java)
- Tőr (Java és Android)
- Windsor vár (.NET)
- Egység (.NET)
Ha többet szeretne megtudni a függőségi injekcióról, nézze meg az alábbi forrásokat:
Java-függőségi injekció - DI tervezési minta példa oktatóanyag - JournalDev
A függőségi injekció használata a Java-ban - Bevezetés - Bemutató - Vogella
A kontroll konténerek inverziója és a függőségi injekció mintája - Martin Fowler
Remélem ez segít!
Ha tetszett a cikk, és több csodálatos cikket szeretnél olvasni, akkor kövess itt (Bhavya Karia), és mutasd meg támogatásodat, mivel ez motivál engem a további írásra.
Ha bármilyen kérdése vagy visszajelzése lenne számomra, akkor csatlakozzon a LinkedIn, a Twitter, a Facebook oldalain.
1. szerkesztés:
Szergej Ufocodernek köszönhetően ezt a cikket orosz nyelvre alakították át. Orosz barátaim, akik mind tudják olvasni az orosz nyelvet, valóban olvasnak.
Link a cikkre
Továbbá, ha DI-t szeretne alkalmazni a JavaScript-ben, és könyvtárat keres, akkor Jo Surikat azt javasolja, hogy próbálja meg a könyvtárát.
Di-Ninja
Még egy fantasztikus DI könyvtárat javasol a JavaScript-ben Nicolas Froidure.
kések
2. szerkesztés:
Ha Ön PHP fejlesztő, akkor ne aggódjon, mindannyian lefedték. Gordon Forsythe ezt a csodálatos könyvtárat ajánlotta, amelyet érdemes kipróbálni.
auryn
Köszönöm a kedves szavakat, amelyeket kaptam. Ne ossza meg a cikket, hogy egyre több ember profitálhasson belőle.
Ha megtudott még egy-két dolgot, kérjük, ossza meg ezt a történetet!