Wpis z mikrobloga

@MQs: Tez bez pewnej przesady. To jest wzorzec projektowy. Bardzo zresztą prosty. Z technicznego punktu widzenia, nawet przekazanie argumentów do metody jest rodzajem wstrzykiwania zależności. O DI jednak mówimy głównie w ujęciu obiektowym, czyli o wstrzykiwani jednych obiektów innym w celu rozluźnienia powiązań.
@szczesc_borze: Gdyby DI uznać za wzorzec to o każdym innym trzeba by mówić jako o szczególnym przypadku DI lub dziedziczenia, a cała obiektówkę można by opisać jako używanie dwóch wzorców, co nie niesie żadnej informacji. Nie dotyczyłoby to jedynie tych "wzorców", które są z kolei nazwami opisującymi rodzaje obiektów (zwykle składowych jakiegoś wzorca bez abstrakcji - np factory czy builder), chociaż bliżej im do definicji wzorców projektowych niż samemu DI moim
@MQs:

Gdyby DI uznać za wzorzec to o każdym innym trzeba by mówić jako o szczególnym przypadku DI lub dziedziczenia, a cała obiektówkę można by opisać jako używanie dwóch wzorców, co nie niesie żadnej informacji.


Wydaje mi się, że kluczowe dla tej dyskusji jest zrozumienie, że wzorce rozwiązują pojedyncze problemy i robią to na różnych poziomach abstrakcji. DI pozwala budować zależności między komponentami zgodnie z bardziej ogólną koncepcją IoC, a taka
wzorce rozwiązują pojedyncze problemy i robią to na różnych poziomach abstrakcji.


@szczesc_borze: Wciąganie różnych poziomów abstrakcji kończy się tym, że wzorcem może być wszystko, bo całe programowanie to rozwiązywanie problemów na pewnym poziomie abstrakcji. Immutable object - wzorzec, bo pozwala na..., private method - wzorzec, bo pozwala na..., if-else też rozwiązuje pewien problem itd. Mnożysz byty bez potrzeby i wprowadzasz niejednoznaczność. Jeden powie, że użył strategii, a drugi że dependency
@MQs: Nie rozumiem chyba do końca idei stojącej za tym co piszesz. Wzorce to sprawdzone techniki, które doczekały się nazw ze względu na popularność i skuteczność danego rozwiązania dla powtarzającego się problemu. Podział wzorców jest oparty o ich rolę i poziom abstrakcji własnie. Wzorce architektoniczne to chociażby MVC i opisują działanie całych systemów, kiedy wzorce projektowe dotyczą relacji w jakich pozostają klasy i obiekty.
DI dotyczy bezpośrednio relacji między obiektami i
Podział wzorców jest oparty o ich rolę i poziom abstrakcji własnie.


@szczesc_borze: No przecież dlatego to poruszyłem, bo próbowałeś mnie przekonać że wzorce projektowe dotyczą różnych poziomów abstrakcji.

Nie wiem czemu Fowler DI przeciwstawia Service Locator. Dla mnie to trochę niespójne, bo DI zawsze traktowałem jako sposób na kompozycję obiektów, a SL to jeden z wzorców z niej korzystający - wypaczony, bo ukrywa bezpośrednie zależności poprzez wstrzyknięcie kontenera jako zależności bezpośredniej.