Wpis z mikrobloga

[ #nodejs #typescript #inversifyjs #naukaprogramowania ]

Hej, jest tutaj ktoś kto korzysta z inversify czy generalnie z ioc w Typescripcie (choć niekoniecznie musi to być TS)? Nie za bardzo mogę zrozumieć o co chodzi w 'Dependency inversion principle', wszędzie czytam, że to jest super, a nie mogę zneleźć żadnego praktycznego przykładu, który by mi pokazał w czym takie podejście jest lepsze od 'zwykłego' importowania modułów + implementowania interfejsów z poziomu klasy i opierania się na nich. :/

Dla zobrazowania weźmy taki przykład. Aplikacja składa się powiedzmy z 3 'warstw'.

1) Kontroler -przekazuje request do serwisu i zwraca response
2) Serwis - jakaś metoda np. #!$%@? hasło i przekazuje obiekt do metody z repozytorium
3) Repozytorium - obiekt zapisywany jest do bazy

Dlaczego warto skorzystać z Inversify zamiast zrobić to np. tak: https://pastebin.com/c3SgLD9a

I co w zasadzie w przykładzie z ninjami i szurikenami jest bindowane do czego.
https://github.com/inversify/InversifyJS#step-3-create-and-configure-a-container

np.
const myContainer = new Container();
myContainer.bind(TYPES.Warrior).to(Ninja);

To jest coś takiego?
myContainer.bind(TYPES.Serwis).to(Serwis)?

Nie można po prostu implementować interfejsu na poziomie klasy? I jak mogę później wstrzykiwać np. serwisy do kontrolera, tak jak napisałem w pastebinie, tylko z adnotacjami @inject?

Kurde, nie jestem w stanie tego zrozumieć. :/ Będę wdzięczny za każdą pomoc.
  • 5
@PrawyKuba: Nie wiem jak to wygląda w TypeScript, ale opiszę sens tego konceptu jak najlepiej umiem.

Jednym ze sposobów implementacji Dependency Inversion Principle jest coś takiego jak kontener IoC. W tym kontenerze masz wszystkie kontrolery, serwisy i repozytoria twojej aplikacji, jednak niepowiązane na stałe, ale posiadające wewnątrz siebie odniesienia pod postacią interfejsów np. XService (implementacja serwisu) ma pole o typie XRepository (interfejs).

Framework którego używasz ma wiedzę o tych wszystkich instancjach