Planuję porozmawiać na temat Dependency Injection i IoC Containers i szukam dobrych argumentów za jego użyciem.
Jakie są najważniejsze zalety korzystania z tej techniki i tych narzędzi?
Planuję porozmawiać na temat Dependency Injection i IoC Containers i szukam dobrych argumentów za jego użyciem.
Jakie są najważniejsze zalety korzystania z tej techniki i tych narzędzi?
Odpowiedzi:
Najważniejsze jest dla mnie ułatwienie przestrzegania zasady pojedynczej odpowiedzialności .
DI / IoC ułatwia mi zarządzanie zależnościami między obiektami. To z kolei ułatwia mi przełamanie spójnej funkcjonalności we własnej umowie (interfejsie). W rezultacie mój kod został znacznie bardziej zmodularyzowany, odkąd dowiedziałem się o DI / IoC.
Innym rezultatem tego jest to, że znacznie łatwiej mogę przejść do projektu, który obsługuje zasadę otwartego i zamkniętego . Jest to jedna z najbardziej inspirujących technik (po testach automatycznych). Wątpię, czy mógłbym wystarczająco docenić zalety zasady otwartej i zamkniętej.
DI / IoC to jedna z niewielu rzeczy w mojej karierze programistycznej, która zmieniła grę. Istnieje ogromna różnica w jakości między kodem, który napisałem przed i po nauce DI / IoC. Podkreślę to jeszcze trochę. OGROMNA poprawa jakości kodu.
Przykłady, które naprawdę otworzyły mi oczy, pokazały, w jaki sposób można łatwo testować w jednostce obiekty utworzone w taki sposób. Wcześniej miałem problemy z izolowaniem obiektów na potrzeby testu jednostkowego. Często pisałem testy, by współpracować ze znacznie większym systemem. Było to naprawdę trudne, ponieważ system jako całość był znacznie mniej przewidywalny i znacznie bardziej podatny na zmiany niż poszczególne elementy.
Zalety zastrzyków uzależnienia to:
Myślę, że rzeczywiste korzyści są bardziej polityczne niż techniczne. DI to po prostu alternatywa dla wzorca Service Locator , nic więcej. Samo w sobie nie ułatwia przestrzegania zasad takich jak SRP lub OCP ani rozłączania warstw. Inni respondenci mylą różne koncepcje i techniki, IMO.
Możesz osiągnąć te same cele w odniesieniu do wysokiej kohezji i niskiego sprzężenia za pomocą lokalizatorów usług lub po prostu poprzez bezpośrednie tworzenie zależności, gdy ma to zastosowanie (co jest przez większość czasu).
Teraz wiem, że wielu nie zgodzi się z tą opinią. Z przyjemnością omówię konkretne przykłady.
Gdy do odsłonięcia obiektów wewnętrznych do celów testowania stosuje się DI, wzór został nadużyty.