Gyors bevezetés a függőségi injekcióhoz: mi az, és mikor kell használni

Bhavya Karia

Bevezetés

a szoftverfejlesztésben a függőségi befecskendezés olyan technika, amelynek során az egyik objektum (vagy statikus módszer) egy másik objektum függőségeit szolgáltatja. A függőség egy használható objektum (szolgáltatás).

Ez a Wikipedia definíciója, de még mindig, de nem különösebben könnyű megérteni. Tehát é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 segít jobban megérteni a koncepciót.

függőség vagy függő azt jelenti, hogy valamire támaszkodunk a támogatáshoz. Mintha azt mondanám, hogy túl sokat támaszkodunk a mobiltelefonokra, mint ez azt jelenti, hogy tőlük függünk.

tehát mielőtt a függőségi injekciókhoz jutna, először értsük meg, mit jelent a függőség a programozásban.

amikor az A osztály A B osztály bizonyos funkcióit használja, akkor azt mondta, hogy az A osztály A B osztálytól függ.,

az osztályok közötti függőségek megjelenítése

Java-ban, mielőtt más osztályok módszereit használná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 valaki másnak, közvetlenül a függőség használatával dependency injection-nek nevezzük.

mi lenne, ha a kód beszélne?

miért használjam a dependency injection-t?,

tegyük fel, hogy van egy autó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, ha úgy döntünk, hogy a jövőben mrfwheels-t dobunk, és Yokohama kerekeket akarunk használni?

újra kell hoznunk az autó objektumát egy új Yokohama függőséggel. De a dependency injection (DI) használatakor futásidőben megváltoztathatjuk a kerekeket (mert a függőségek futásidőben, nem pedig fordításkor injektálhatók).,

Azt hiszem, DI, mint a közvetítő a kód, aki végzi a munkáját létre a kívánt kerekek tárgy, illetve azáltal, hogy a Kocsi osztály.

az autóosztályunk független a kerekek, az akkumulátor stb.

alapvetően háromféle függőségi befecskendezés létezik:

  1. konstruktor befecskendezés: a függőségek egy osztály konstruktoron keresztül vannak megadva.
  2. setter injection: az ügyfél egy szetter módszert tesz közzé, amelyet az injektor használ a függőség befecskendezéséhez.,
  3. interface injection: a dependency egy injektor módszert biztosít, amely a függőséget minden átadott kliensbe beadja. Az ügyfeleknek végre kell hajtaniuk egy olyan felületet, amely kiteszi a függőséget elfogadó szetter módszert.

tehát most a dependency injection felelőssége:

  1. hozza létre az objektumokat
  2. tudja, mely osztályok igénylik ezeket az objektumokat
  3. és adja meg nekik ezeket az objektumokat

Ha bármilyen változás történik az objektumokban, akkor DI belenéz, és nem érintheti az osztály ezeket az objektumokat., Ily módon, ha a tárgyak a jövőben megváltoznak, akkor a DI felelőssége, hogy a megfelelő objektumokat biztosítsa az osztály számára.

inversion of control —a koncepció mögött DI

Ez kimondja, hogy egy osztály nem kell beállítani a függőségek statikusan, de be kell állítani egy másik osztály kívülről.

Ez a S. O. L. I. D ötödik alapelve — Bob bácsi objektumorientált programozásának és tervezésének öt alapelve -, amely kimondja, hogy egy osztálynak absztrakciótól kell függnie, nem pedig konkrétumoktól (egyszerű szavakkal, kemény kódolással).,

az alapelvek szerint az osztálynak a feladatai teljesítésére kell koncentrálnia, nem pedig olyan tárgyak létrehozására, amelyek szükségesek e kötelezettségek teljesítéséhez. Ez az, ahol a dependency injection játékba kerül: biztosítja az osztály számára a szükséges objektumokat.

Megjegyzés: Ha Bob bácsi szilárd alapelveiről szeretne megtudni, akkor erre a linkre léphet.

A Di

  1. használatának előnyei segítenek az egység tesztelésében.
  2. a Kazánlemez kódja csökken, mivel a függőségek inicializálását az injektor komponens végzi.,
  3. Az alkalmazás kiterjesztése könnyebbé válik.
  4. segít a laza csatolásban, ami fontos az alkalmazás programozásában.

di

  1. egy kicsit bonyolult a tanulás, és ha túlhasznált vezethet kezelési problémák és egyéb problémák.
  2. sok fordítási időhibát a futási időre tolnak.
  3. a függőségi befecskendezési keretrendszerek reflexióval vagy dinamikus programozással kerülnek megvalósításra. Ez akadályozhatja az IDE automatizálás használatát, mint például a” referenciák keresése”, a” híváshierarchia megjelenítése ” és a biztonságos refactoring.,

a dependency injection-t saját (tiszta vanília) alkalmazhatja, vagy harmadik féltől származó könyvtárakat vagy keretrendszereket használhat.

könyvtárak és keretrendszerek, amelyek a DI

  • Spring (Java)
  • Google Guice (Java)
  • Castle Windsor (. Net)
  • Unity (.,NET)

Ha többet szeretne megtudni függőségi injekció, akkor nézd meg az alábbi források:

Java függőségi injekció-DI tervezési minta példa Tutorial-JournalDev

használata függőség injekció Java-Bevezetés-Tutorial-Vogella

inverzió kontroll konténerek és a függőség befecskendezési minta-Martin Fowler

remélem segít!

Ha tetszett a cikk, és szeretne olvasni több csodálatos cikkeket, akkor Kövess ide (Bhavya Karia), és mutassa meg a támogatást, mivel motivál, hogy írjon többet.,

Ha bármilyen kérdése vagy visszajelzése van számomra, akkor csatlakozzunk a LinkedIn , a Twitter, a Facebook oldalon.

Edit 1:

köszönhetően Szergej Ufocoder most ezt a cikket alakították át az orosz nyelvet. Az orosz barátaim, és akik mind el tudják olvasni az orosz nyelvet, olvassák el.

Link a cikk

is, ha azt szeretnénk, hogy alkalmazni di JavaScript és keres egy könyvtár, akkor Jo Surikat azt sugallja, hogy egy próbát, hogy a könyvtár.

di-Ninja

még egy félelmetes di könyvtár JavaScript javasolta Nicolas Froidure.,

knifecycle

Szerkesztés 2:

Ha egy PHP fejlesztő, akkor ne aggódj, megvan az összes tartozó is. Gordon Forsythe ajánlotta ezt a csodálatos könyvtárat, amelyet érdemes kipróbálni.

auryn

köszönöm az összes kedves szót, amit kaptam. Ossza meg a cikket, hogy egyre több ember részesülhessen előnyben.

Share

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük