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ć… 🙂