Szybkie wprowadzenie do iniekcji zależności: co to jest i kiedy go używać

by Bhavya Karia

wprowadzenie

w inżynierii oprogramowania iniekcja zależności jest techniką, w której jeden obiekt (lub statyczna metoda) dostarcza zależności innego obiektu. Zależność jest obiektem, który może być użyty (usługa).

to definicja Wikipedii, ale jednak, ale nie jest szczególnie łatwa do zrozumienia. Więc zrozummy to lepiej.,

zanim zrozumiemy, co to znaczy w programowaniu, najpierw zobaczmy, co to znaczy ogólnie, ponieważ pomoże nam lepiej zrozumieć tę koncepcję.

Dependency lub dependent oznacza poleganie na czymś dla wsparcia. Na przykład, jeśli powiem, że zbytnio polegamy na telefonach komórkowych, niż oznacza to, że jesteśmy od nich zależni.

więc zanim przejdziemy do iniekcji zależności, najpierw zrozummy, co oznacza zależność w programowaniu.

Gdy Klasa A używa jakiejś funkcjonalności klasy B, to mówi się, że Klasa A ma zależność od klasy B.,

Pokazywanie zależności pomiędzy klasami

w Javie, zanim będziemy mogli użyć metod innych klas, najpierw musimy utworzyć obiekt tej klasy (tzn. Klasa A musi utworzyć instancję klasy B).

tak więc przeniesienie zadania tworzenia obiektu do kogoś innego i bezpośrednie użycie zależności nazywa się dependency injection.

co by było gdyby kod mógł mówić?

dlaczego powinienem używać dependency injection?,

Załóżmy, że mamy klasę samochodu, która zawiera różne przedmioty, takie jak koła, silnik itp.

tutaj Klasa samochodu jest odpowiedzialna za tworzenie wszystkich obiektów zależności. A co jeśli w przyszłości zdecydujemy się porzucić MRFWheels i chcemy używać kół Yokohama?

będziemy musieli odtworzyć obiekt samochodu z nową zależnością od Yokohamy. Ale podczas używania dependency injection (DI), możemy zmieniać koła w czasie wykonywania (ponieważ zależności mogą być wstrzykiwane w czasie wykonywania, a nie w czasie kompilacji).,

możesz myśleć o DI jako o pośredniku w naszym kodzie, który wykonuje całą pracę nad stworzeniem preferowanego obiektu kół i przekazaniem go klasie samochodu.

sprawia, że nasza klasa samochodu jest niezależna od tworzenia elementów kół, akumulatorów itp.

istnieją zasadniczo trzy rodzaje iniekcji zależności:

  1. constructor iniection: zależności są dostarczane przez konstruktor klasy.
  2. setter injection: klient wyświetla metodę setter, której wtryskiwacz używa do wstrzykiwania zależności.,
  3. interface injection: zależność dostarcza metodę wtryskiwacza, która wstrzyknie zależność do dowolnego klienta przekazanego do niej. Klienci muszą zaimplementować interfejs, który wyświetla metodę settera akceptującą zależność.

więc teraz jest to zadanie polegające na iniekcji zależności:

  1. Tworzenie obiektów
  2. wiedzieć, które klasy wymagają tych obiektów
  3. i dostarczyć im wszystkie te obiekty

jeśli jest jakaś zmiana w obiektach, to DI patrzy na to i nie powinno dotyczyć klasy używającej tych obiektów., W ten sposób, jeśli obiekty zmienią się w przyszłości, to jego DI jest odpowiedzialne za dostarczenie odpowiednich obiektów do klasy.

Inwersja sterowania —koncepcja stojąca za DI

mówiąca, że klasa nie powinna statycznie konfigurować swoich zależności, ale powinna być skonfigurowana przez jakąś inną klasę z zewnątrz.

jest to piąta zasada S. O. L. I. D — pięciu podstawowych zasad programowania obiektowego i projektowania autorstwa wujka Boba-która mówi, że klasa powinna zależeć od abstrakcji, a nie od konkrecji (w prostych słowach, hard-coded).,

zgodnie z zasadami klasa powinna koncentrować się na wypełnianiu swoich obowiązków, a nie na tworzeniu obiektów, których potrzebuje do wypełnienia tych obowiązków. I tu właśnie wchodzi w grę dependency injection: dostarcza klasie wymagane obiekty.

Uwaga: Jeśli chcesz dowiedzieć się o solidnych zasadach wujka Boba, możesz przejść do tego linku.

korzyści z używania DI

  1. pomaga w testowaniu jednostkowym.
  2. kod płyty kotła jest zredukowany, ponieważ inicjalizacja zależności odbywa się przez komponent wtryskiwacza.,
  3. rozszerzenie aplikacji staje się łatwiejsze.
  4. pomaga włączyć luźne sprzężenie, co jest ważne w programowaniu aplikacji.

wady DI

  1. jest to trochę skomplikowane, a jeśli nadużywanie może prowadzić do problemów z zarządzaniem i innych problemów.
  2. wiele błędów w czasie kompilacji jest wypychanych do run-time.
  3. dependency injection frameworks są implementowane z programowaniem refleksyjnym lub dynamicznym. Może to utrudnić korzystanie z automatyzacji IDE, takiej jak „Znajdź referencje”, „Pokaż hierarchię połączeń” i bezpieczne refaktoryzowanie.,

możesz zaimplementować dependency injection na własną rękę (Pure Vanilla) lub użyć bibliotek lub frameworków innych firm.

Biblioteki i frameworki implementujące DI

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

aby dowiedzieć się więcej na temat iniekcji zależności, możesz zapoznać się z poniższymi zasobami:

Java Dependency Injection — di Design Pattern przykład samouczek — JournalDev

używanie injekcji zależności w Javie — wprowadzenie — Tutorial — Vogella

Inwersja kontenerów kontrolnych i wzorzec injekcji zależności — Martin Fowler

Mam nadzieję, że to pomoże!

Jeśli spodobał ci się artykuł i chcesz przeczytać więcej niesamowitych artykułów, to Śledź mnie tutaj (Bhavya Karia) i pokaż swoje wsparcie, ponieważ motywuje mnie to do pisania więcej.,

Jeśli masz jakieś pytania lub uwagi do mnie, to zapraszam na LinkedIn , Twitter, Facebook.

Edit 1:

dzięki Sergey Ufocoder teraz ten artykuł został przekonwertowany na język rosyjski. Moi rosyjscy przyjaciele i wszyscy, którzy potrafią czytać w języku rosyjskim, dają do czytania.

Link do artykułu

również, jeśli chcesz zastosować DI W JavaScript i szukasz biblioteki to Jo Surikat sugeruje, aby spróbować do jego biblioteki.

di-Ninja

jeszcze jedna niesamowita biblioteka DI W JavaScript została zasugerowana przez Nicolasa Froidure.,

knifecycle

Edit 2:

Jeśli jesteś programistą PHP, to nie martw się, masz wszystko pokryte, jak również. Gordon Forsythe polecił tę niesamowitą bibliotekę, którą wszyscy chcielibyście wypróbować.

auryn

dziękuję za wszystkie miłe słowa, które otrzymałem. Podziel się artykułem, aby coraz więcej osób mogło z niego skorzystać.

Share

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *