konie

Dependency Injection – dyskusja

Witaj!

Ostatni wpis został przez kilka osób skomentowany na grupie PHPers. Kilka wypowiedzi było interesujących więc przytoczę kilka fragmentów.

Damian Mąsior: Aby to miało sens w “poprawionym” przykładzie nie polegaj na konkretach (S3Client) tylko na abstrakcjach. W tym wypadku np. StorageContract (interface). Będzie po drodze z Liskov sub. principle. Usuń fragment o setterze, wojownicy immutability już szarżują. Zmień nazwę klasy z S3 na coś innego..

Przykład we wpisie jest żywcem wzięty z jednego z projektów w którym DI wprowadzałem, nie jest on zgodny z SOLID, ale jest bardzo prosty.

Maciej Niepiekło: Immutability to jedno, ale używając settera zwiększasz complexity. Trzeba pamiętać, że do poprawnego działania klasy, po konstruktorze należy jeszcze przekazać zależności.

W pełni się zgadzam z kolegami. DI poprzez settery jest możliwe, ale jak widać niesie ze sobą pewne konsekwencje. Także nie polecamy tego rozwiązania 🙂

Paweł Wrzeszcz“kod może się wydawać trudniejszy do zrozumienia”, myślę, że niekoniecznie 😉

Faktycznie, samo DI nie jest specjalnie skomplikowane. Lecz gdy dodasz kontener na zależności, interfejsy, dużą liczbę implementacji, to czasami ciężko jest się połapać… 🙂