Witam, piszę aplikację z użyciem ASP.NET MVC. Jest to prosta aplikacja, aby poćwiczyć składająca się z kilku tabel dlatego zastanawiam się czy w takich prostych aplikacjach powinno używać się np DI ? Jakie są Wasze opinie ?
Choćby do wstrzykiwania serwisów/repozytoriów/DbContext do twoich kontrolerów może być przydatny.
@Andrew00: nie jestem pewien czy dobrze rozumiem Ciebie, ale wydaje mi się że mogłes pomylić kontener IoC z DI. Kontener to tylko jedna z form stosowania wstrzykiwania zależności. Ja DI stosuje praktycznie zawsze, korzystając z konstruktorów, przy czym te konstruktory mogą być wywołane przez kontener Springowy (pisze w Javie).
Tak, używaj DI. Skoro piszesz mała aplikacje do nauki, to dla czego nie uczyć się też dobrych praktyk?
Zapytam jeszcze o technologię ASP.NET, gdybyście mieli teraz wybrać to MVC czy może WebForms ?
Tylko i wyłącznie MVC. Jeśli natomiast nie ma innego wymogu, to ucz się ASP Core.
Może mi ktoś wyjaśnić jakie korzyści są z DI, oprócz tego ze możemy ustawić która implementacja ma być wstrzykiwana?
kzkzg napisał(a):
Może mi ktoś wyjaśnić jakie korzyści są z DI, oprócz tego ze możemy ustawić która implementacja ma być wstrzykiwana?
- Wstrzykiwania i tak każdy używa, tylko nie każdy to wie, bo niektórzy myślą, że DI wymaga magii. Tymczasem w kodzie
new BufferedInputStream(new FileInputStream(someFile))
wstrzyknęliśmy obiekty typu FileInputStream do obiektu typu BufferedInputStream. - Wstrzykiwanie we własnych klasach przydaje się do testowania. Np klasa FolderSynchronizer może mieć wstrzyknięte dwa parametry: sourceFolder i targetFolder. Potem odpalamy jakąś metodę, np synchronize i ta metoda synchronizuje te foldery. Jeśli nie testujemy to możemy na sztywno używać np wartości z globalnej konfiguracji i styknie. Natomiast w testach chcielibyśmy uniknąć zabawy z modyfikowaniem globalnego stanu.
- Nawet jeśli nie obchodzi nas testowanie to wstrzykiwanie umożliwia też tworzenie wielu instancji obiektu, które robią trochę co innego. Chcemy mieć dwie instancje klasy FolderSynchronizer? Podajmy (czyli wstrzyknijmy) zależności (tutaj: konfigurację, czyli namiary na foldery) jako parametry i gotowe.
- I tak dalej...
Zacząłem testować użycie Ninject w C# i nasunęło mi się takie pytanie.
Gdy mam jakąś prostą aplikację w ASP.NET z użyciem MVC np. rezerwację książki z biblioteki ( lub coś równie prostego) to metody typu dodaj do bazy, usuń, modyfikuj itp. powinno się do nich używać interfejsów i później cały mechanizm wstrzykiwania zależności czy może jest to użycie zbyt dużego kalibru ?
Drugie pytanie: z Waszego doświadczenia jakie interfejsy stworzylibyście w takie aplikacji z rezerwacją. ( chcę to dobrze zrozumieć i ciekawi mnie jak podeszlibyście do tego typu zagadnienia ) ?
Zacząłem testować użycie Ninject w C# i nasunęło mi się takie pytanie.
Raz jeszcze zachecam do nauki ASP.Net Core. Masz tam wbudowany mechanizm DI ktory- moim zdaniem- jest wlasnie bardzo dobry do nauki bez instalowania zewnetrznych paczek DI.
Gdy mam jakąś prostą aplikację w ASP.NET z użyciem MVC np. rezerwację książki z biblioteki ( lub coś równie prostego) to metody typu dodaj do bazy, usuń, modyfikuj itp. powinno się do nich używać interfejsów i później cały mechanizm wstrzykiwania zależności czy może jest to użycie zbyt dużego kalibru ?
To zalezy co probujesz osiagnac. Uczyc sie? Uzywaj DI. Pisac kod poprawnie i tak aby mozna bylo go latwo rozszerzac i testowac? Uzywaj DI. Napisac cos szybko "na kolanie" w ramach szybkiego przetestowania? Zapewne mozna to olac.
Drugie pytanie: z Waszego doświadczenia jakie interfejsy stworzylibyście w takie aplikacji z rezerwacją. ( chcę to dobrze zrozumieć i ciekawi mnie jak podeszlibyście do tego typu zagadnienia )?
"Taka aplikacja z rezerwacja" moze oznaczac bardzo wiele, wszystko zalezy od wymagan. Nie tworz abstrakcji na sile, tworz ja tam gdzie widzisz potrzebe (czyli np. jesli w kontrolerze chcesz wywolac jakis serwis biznesowy zaczynajac od "new" to jest to oznaka ze nalezy wprowadzic abstrakcje i DI). Jesli jeszcze tego nie zrobiles, to zacznij pisac testy swojego kodu. Sam zobaczysz gdzie DI moze bardzo to ulatwic.