fbpx
devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
3 minut

Kilka postów o Dependency Injection


26.05.2014

Jak można było dowiedzieć się z moich ostatnich postów społecznościowo-konferencyjnych (jeden, drugi, trzeci), miałem ostatnio prezentacje na temat Dependency Injection. Dość dziwne jest to o tyle, że na ten temat nie blogowałem właściwie od czterech lat. Pora zaległości nadrobić:).

Pojawiły się za to treści gdzieś indziej. Po jednym z moich występów Basia podjęła temat. Po jej poście Paskol też coś naskrobał. A i w polskiej-anglojęzycznej blogosferze znalazło się miejsce na DI, chociaż nie wiem czy było to zależne od poprzednich wpisów czy też nie.

W kilku następnych postach planuję przedstawić swoją prezentację, ale w formie pisanej. Przejedziemy się po pokazywanym przeze mnie kodzie, obserwując istniejącą pseudo-aplikację przed, w trakcie i po procesie “refaktoryzacji” z brzydkiego fe-kodu do nieidealnej, ale lepszej postaci, osiągniętej dzięki DI.

Kod, który będę pokazywał, jest dostępny na GitHubie: https://github.com/maniserowicz/di-talk. Zachęcam do sklonowania tego repo. Niektóre kawałki kodu będę przeklejał do postów, ale najwięcej będzie można wyczytać poruszając się po tak zwanym żywym organizmie.

Małe wtrącenie: w czerwcu mam zaplanowane kolejne wystąpienie z tym tematem. Jeśli więc, czytelniku najdroższy umiłowany, wybierasz się na spotkanie ze mną w Olsztynie, to odpuść póki co te posty gdyż spoilerem są niesamowitym i będzie ci nudno :). Początkowo planowałem publikację tego cyklu po zakończeniu “DI-tournee”, ale rency sami się zaczęli rwać do pisania, więc i zwlekać nie ma co… bo ochota odejdzie.

A póki co… po co w ogóle DI?

Dependency Inversion Principle jest ostatnią w pakiecie dobrych praktyk SOLID. Mamy więc SOLIDependency Inversion. Jest ona o tyle nieodzowna, że de facto umożliwia, a nawet sugeruje, zastosowanie wszystkich pozostałych zasad. Wykorzystując dobra niesione przez DI uzyskamy kod, który będzie czytelniejszy niż do tej pory. A skoro jest czytelniejszy, to będzie łatwiej go zrozumieć. Zatem: łatwiej utrzymywać.

Niejako bonusowo wzrośnie też testowalność pisanego przez nas rozwiązania, co zobaczymy na przykładach. Dodatkowo otrzymamy możliwość bezbolesnej, w teorii, podmiany implementacji niektórych komponentów, choć to akurat jest kwestia dosyć dyskusyjna…

Ale, dość gadania, show me the code! Już za minutkę, już za momencik… Do następnego!

Notify of
trackback

Kilka postów o Dependency Injection | Maciej Aniserowicz o programowaniu…

Dziękujemy za dodanie artykułu – Trackback z dotnetomaniak.pl…

Tymoteusz zza miedzy
Tymoteusz zza miedzy

Kurcze, mimo usilnych prób nie jestem w stanie pojąć koncepcji DI. Czytam o tym, patrze na kody i nic. Nie widzę jak tego używać w praktyce.

siararadek
siararadek

PoorMansContainer :D

Jacek
Jacek

DI może i sprawia ze kod jest czytelniejszy i używam kiedy tylko mogę (a czasem nawet i kiedy nie mogę) ale jak każda technologia niesie swoje własne problemy które zaciemniają problem. W tamtym tygodniu walczyłem z dziwnym błędem który nie wydawał mi się nawet w ogóle możliwy. A wyszło na to że namieszałem w konfiguracji cyklu życia obiektów DI.

Paweł
Paweł

Ale w twoim przypadku nie sama idea DI nie stworzyła twojego problemu. Ani go nie zaciemniła. Pokiełbasiłeś konfigurację, a powiesz, że to to DI jest złe.

Jacek
Jacek

A czy ja mówię że DI jest złe. Ja dla mnie to najlepsza rzecz od czasu wynalezienie mleka w proszku. Ale jak zawsze użycie czegoś rozwiązuje jakiś zestaw problemów a rodzi kompletnie inny (co nie znaczy że z automatu gorszy).

Adam
Adam

Procent,

Co ‘standardowego’ cyklu życia obietku polecam się upewnic mimo wszsytko bo np. dla Castle Windsor defaultem jest singleton – o czym przekonanie się kosztowało mnie kilka wtf.

jako
jako

Niestety tak jest. Ale jest napisane, i przed użyciem trzeba było (w moim przypadku) swoje odczytać:
http://docs.castleproject.org/Default.aspx?Page=LifeStyles&NS=Windsor&AspxAutoDetectCookieSupport=1

PaSkol

Dodam tylko, że ja jeszcze skrobania nie skończyłem ;), a wręcz kontynuuje (http://paskol.robi.to/?p=1945).

Kurs Gita

Zaawansowany frontend

Szkolenie z Testów

Szkolenie z baz danych

Facebook

Książka

Zobacz również