ASP.Net MVC wstrzykiwanie zależności

0

Witam,
Jestem obecnie na etapie czytania po raz drugi książki ASP.NET MVC5 zaawansowane programowanie Freemana, autor tej książki wlasnie z wstrzykiwania zależności i chciałbym was zapytac czy wy rowniez korzystacie z tego podczas pracy, widze to po raz pierwszy wlasnie w tej książce, a miałem juz okazje przerabiać rożne kursy.
Moje kolejne pytanie odnosi sie do tego ze planuje wykonać w celach naukowych aplikacje, ktora pozwlalaby na stworzenie Ci twojej własnej ankiety rozesłania do niej linka po znajomych i anonimowe jej uzupełnianie przez osoby zainteresowane w przeciągu np tygodnia. Moj problem polega teraz na tym, że zastanawiam sie jakie klasy i pola powinna zawierać ta aplikacja np klase Ankiets z polami : Lista Pytan, Nazwa i tematyka, klasa pytania: zawierająca odpowiedzi no i treść pytania, i klasa odpowiedz zawierająca no wlasnie chyba treść tej odpowiedzi.
Problem polega na tym, Że nie wiem jak zobrazować to w bazie danych ze wybrana ankieta ma te pytania, te pytania maja wybrane odpowiedz i gdzie powinny znajdować sie wybrane odpowiedzi.
Ostanie o co chce zapytać czy istnieje narzedzie, które pozwalałoby zobrazować wybrane wyniki dla danej ankiety np.w postacie wykresu z excela lub cos takiego
Pozdrawiam

1

ad1) Tak z Dependency Injection korzysta się na co dzień w każdym projekcie - co nie znaczy że codziennie się tam coś dodaje ;-).
Ja w pracy korzystałem do tej pory jedynie z Castle - jeden ze starszych i popularniejszych, oraz w domu z Ninjecta. O ile mnie pamięć nie myli Microsoft teraz wprowadził tez swoje rozwiązanie dostępne out of the box z nowym MVC6 - ale nie sprawdzałem.
ad2) zastanów się najpierw jak dokładnie chcesz żeby to działało, potem zacznij pisać... najlepiej od testów :)
ad3) Jak masz wyniki w bazie w jakiejś formie, to da się wyciągnąć z nich to co Cię interesuje i potem przedstawić na wykresie. Są gotowe rozwiązania w JS.

0

W tej książce autor korzysta właśnie z Ninjecta. Zacząć od testów rozumiem, że masz na myśli unit testy, których nie potrafię jeszcze pisać między innymi z tego powodu muszę czytać tą książkę drugi raz. Co do samej aplikacji widzę to tak: wchodzisz na moją stronę (pomijając już sam wygląd itd) zakładasz swoją własną ankietę do, której link możesz gdzieś udostępnić(może na stronie również być sekcja dostępne ankiety) i jest ona na serwerze przez tydzień ludzie uzupełniają ja anonimowo po czym wybrane odpowiedzi zostają wysłane do bazy danych i po tygodniu osoba która ją założyła otrzymuje zobrazowane wyniki wybranych odpowiedzi przez daną liczbę osób.
Ma to być mój pierwszy taki projekt, którym ewentualnie mógłbym się pochwalić w momencie gdy chciałbym iść na staż na 3 roku studiów obecnie jestem na 2.
Większość kursów opiera się na robieniu sklepu internetowego, czy też np grupy studentów biorących udział w kursach i wypisanie pobierając z bazy danych informacje na ten temat kto w jakim kursie uczestniczy. Dopiero po raz pierwszy w tej książce dowiedziałem się o DI, o unit testach wiedziałem wcześniej lecz nigdy nie miałem z nimi do czynienia samo takie dokładne zrozumienie i w miarę swobodne poznanie MVC zajmuje mi już pół roku i dalej cel nie został osiągnięty wynika to z tego, że nie zawsze mogę się poświęcić nauce samego programowania bo mam też studia i pewnie też z mojego opornego przyswajania wiedzy. Z ciekawości ile wam zajęło poznanie tej technologi i czy pierwszy raz mieliście z nią styczność w pracy/stażu/praktykach czy uczyliście się jej samodzielnie jak ja w domu, jeżeli tak to podeślijcie jakiś link do kursu, który wam rozjaśnił sprawę i pozwolił pisać pierwsze złożone aplikacje.

1
Steff napisał(a):

Jestem obecnie na etapie czytania po raz drugi książki ASP.NET MVC5 zaawansowane programowanie Freemana, autor tej książki wlasnie z wstrzykiwania zależności i chciałbym was zapytac czy wy rowniez korzystacie z tego podczas pracy, widze to po raz pierwszy wlasnie w tej książce, a miałem juz okazje przerabiać rożne kursy.

Nieużywanie wstrzykiwania zależności jest bardzo niewygodne, bo powoduje konieczność napisania ogromnej ilości kodu, który nic do aplikacji nie wnosi. Dlatego dobrą praktyką jest stosowanie wstrzykiwania w praktycznie każdym projekcie.

Moje kolejne pytanie odnosi sie do tego ze planuje wykonać w celach naukowych aplikacje, ktora pozwlalaby na stworzenie Ci twojej własnej ankiety rozesłania do niej linka po znajomych i anonimowe jej uzupełnianie przez osoby zainteresowane w przeciągu np tygodnia. Moj problem polega teraz na tym, że zastanawiam sie jakie klasy i pola powinna zawierać ta aplikacja np klase Ankiets z polami : Lista Pytan, Nazwa i tematyka, klasa pytania: zawierająca odpowiedzi no i treść pytania, i klasa odpowiedz zawierająca no wlasnie chyba treść tej odpowiedzi.
Problem polega na tym, Że nie wiem jak zobrazować to w bazie danych ze wybrana ankieta ma te pytania, te pytania maja wybrane odpowiedz i gdzie powinny znajdować sie wybrane odpowiedzi.

Dużo zależy od tego, jakiego rodzaju pytania masz zamiar obsługiwać. Bo pytań ankietowych jest kilkadziesiąt rodzajów. Ale tak na pierwszy rzut oka potrzebujesz dwóch zestawów klas: SurveyTemplate (czyli lista pytań), Question (pytanie), PossibleAnswer (możliwa odpowiedź dla pytania zamkniętego). Do tego Survey (czyli ankieta wypełniona przez użytkownika, powiązana z SurveyTemplate) no i Answer (czyli odpowiedź wybrana/udzielona przez użytkownika, powiązana z PossibleAnswer).

0

A ja w ogóle tego wstrzykiwania nie rozumiem, choć czytałem o tym z 10 razy. Bardziej nie rozumiem w czym to wstrzykiwanie ułatwia, albo trafiam na dziwne przykłady. Mam klasę w tej klasie metody, zmienne i aby użyć tego wzorca to muszę dodatkowo stworzyć do tego interfejs plus konfiguracja np. Ninjecta to de facto rozbudowujemy sobie kod. Jeśli ktoś jakoś "łopatologicznie", tak jak dla swojej babci wytłumaczy, będę wdzięczny.

2
szymon7500 napisał(a):

A ja w ogóle tego wstrzykiwania nie rozumiem, choć czytałem o tym z 10 razy. Bardziej nie rozumiem w czym to wstrzykiwanie ułatwia, albo trafiam na dziwne przykłady. Mam klasę w tej klasie metody, zmienne i aby użyć tego wzorca to muszę dodatkowo stworzyć do tego interfejs plus konfiguracja np. Ninjecta to de facto rozbudowujemy sobie kod. Jeśli ktoś jakoś "łopatologicznie", tak jak dla swojej babci wytłumaczy, będę wdzięczny.

przede wszystkim ułatwia testowanie, tworzy luźne zależności, nie musisz się martwić tworzeniem obiektów w kontrolerze lub gdziekolwiek indziej, gdzie przekazujesz obiekt jakiejś klasy. a ta właśnie jakaś klasa nie powinna być odpowiedzialna, za tworzenie obiektu innej klasy.
tworząc interfejsy stosujesz się m.in do jednej z ważnych zasad a mianowicie SRP, która się i tak na samym końcu składa na DI.
raczej większość projektów korzysta z Repository Pattern, a wtedy jakoś samo przez się prosi o zastosowanie DI
summa summarum wszystko zbiega się do tworzenia oprogramowania według pewnych wzorców, aby było czytelne i łatwe do utrzymania i rozwijania, trochę pracy na początku bardzo dużo pomaga w późniejszych etapach szczególnie przy średnich i większych projektach.

6

**W DI nie chodzi o testowanie, ani nie są potrzebne do niego interfejsy. **
Owszem, testowanie z DI jest łatwiejsze, no bo jakby nie patrzeć z DI w ogóle wszystko jest łatwiejsze. :)
Interfejsy też nie są potrzebne, każdy kontener wspiera wstrzykiwanie klas. Interfejsy się przydają do dzielenia aplikacji na moduły, i do testów, ale robienie interfejsów do każdej klasy "bo tak", jest bezsensowną stratą czasu.
Stosowanie interfejsów nie ma nic do SRP. (Zresztą, w kontekście interfejsów trudno w ogóle mówić o jakiejś odpowiedzialności.)
Nieprawdą jest, że większość projektów stosuje repozytoria. Stosowane są co najwyżej klasy niepoprawnie nazywane repozytoriami, które nie mają z nimi tak naprawdę nic wspólnego. Ale abstrahując od tego - samo występowanie repozytoriów nie ma nic do DI, to są takie same klasy jak inne.

@szymon7500, załóżmy, że masz klasę A, która w konstruktorze przyjmuje parametry typów: B, C, D i E. B z kolei przyjmuje C, X i Y, C przyjmuje D, Z i Y, zaś D przyjmuje X, U, V, W, a E: U, V, Z. Ile razy musisz wywołać operator new, aby utworzyć obiekt klasy A? A co, jeśli Y i D mają żyć przez cały okres życia aplikacji, zaś inne mają być tworzone przy każdym requeście - jak to zapewnisz? A jeśli do klasy C, która jest tworzona kilkaset razy w aplikacji dojdzie nowy parametr konstruktora, ile będziesz miał roboty z taką zmianą?
A stosując DI, jedynie konfigurujesz kontener, aby znał typy wszystkich klas, a później zaś wystarczy jedna linijka kodu, żeby wyciągnąć każdy, dowolnie skomplikowany obiekt. Widzisz teraz zysk?

0

@somekind, sorry miało być OCP, nie wiem skąd przyszło mi SRP.
trochę za dużo zanegowałeś, a później i tak napisałeś jedną rzecz, z których opisałem.
znam przypadki rozmów kwalifikacyjnych, gdzie powiedzenie tylko, że dzięki DI nie musimy martwić się o tworzenie obiektów to za mało, chcą słyszeć, że to pomaga przy testach itd.

0

Idąc do pierwszej pracy wy już to wszystko potrafiliście ?

0
Zimny Pomidor napisał(a):

znam przypadki rozmów kwalifikacyjnych, gdzie powiedzenie tylko, że dzięki DI nie musimy martwić się o tworzenie obiektów to za mało, chcą słyszeć, że to pomaga przy testach itd.

No, ale DI w testach nie pomaga w ogóle... Jeśli testujesz jakąś klasę, to przecież zależności mockujesz, a nie wstrzykujesz z kontenera.

Steff napisał(a):

Idąc do pierwszej pracy wy już to wszystko potrafiliście ?

Nie.

0

To że tego nie umieliście w pewnym sensie mnie pocieszyło, bo tak jak już wspomniałem na młodszego programistę czasami wymagania są spore. Już niejednokrotnie czytałem na forum, że większość rzeczy ludzie uczyli się w pracy, a w momencie kiedy ich przyjmowali niewiele potrafili. I zastanawiam się po prostu czy teraz już nastały czasy, że pracodawcy chcą już mieć bardziej kompletnego pracownika od pierwszego dnia pracy czy o co w tym chodzi, może faktycznie specjalnie podkręcają wymagania w ofercie mimo, że są wstanie z czegoś zrezygnować ale czasami jest ich sporo, a wiadomo z wszystkiego nie zrezygnują. Mam jeszcze rok czasu więc może w tym czasie sprostam obecnym oczekiwaniom, chociaż chciałem już od 3 roku studiów zacząć gdzieś pracować to już dziś wiem, że odciągnie mi się to w czasie za dużo tego wszystkiego. Dziękuje wszystkim za odpowiedź, w razie wątpliwości będę jeszcze pytał :)

0

Cześć,
Odkopie temat, tym razem z trochę innym pytanie. W te wakacje chciałbym dostać się na staż co dzień czytam forum i ludzie często piszą żeby realizować własne projekty i umieszczać je na gicie i tutaj mam pytanie czy ma sens wrzucanie na swojego gita programu takiego typu jak w załączniku, jest to dosyć prosta konsolowa aplikacja będąca imitacją biblioteki z wykorzystaniem Entity Framework. Oczywiście to wszystko to podstawy ale ja też zamierzam aplikować ja na jakiś bezpłatny staż, w celu poszerzenia tej wiedzy którą już posiadam. Jeżeli ktoś miałby odrobinę czasu i by mu się chciało prosiłbym o to żeby rzucił okiem na tą aplikacje i powiedział mi jakie są najbardziej rażące błędy oraz odpowiedział mi na powyższe pytanie.
Teraz drugie pytanie odnośnie mojej aplikacji z wykorzystaniem ASP.NET MVC, która ma być imitacją strony na której możemy stworzyć własną ankietę i rozesłać link do strony po znajomych w celu uzyskania w dosyć szybkim czasie koniecznych dla nas informacji czy coś takiego. A mianowicie czy do obiektu pytanie dodać jakąś zmienna boolowska, która w momencie gdy ktoś odpowiedział by na pytanie przyjmowała by wartość true i zostałby wyświetlony np jakiś komunikat dziękuje i zielony haczyk czy coś takiego ? Ponieważ gdy używam foreach na zbiór pytań dla danej odpowiedzi, to żeby wrócić do tej ankiety po odpowiedzi, to przekazuje wybraną odpowiedź i adres url żeby wrócić do tego samego kontrolera, ale moja aplikacja nie wie, że na to pytanie już padła odpowiedź i wyświetla mi je po raz kolejny.
Trzecie pytanie jest odnośnie pisania CV na staż i chodzi mi o to czy stopniować swoje umiejętności również przeglądałem posty na forum i ludzie pisali, że albo się coś umie albo nie co dla mnie jest trochę nie logiczne, jeżeli pracodawcy sami stopniują wymagania w ofertach no i tak jak w moim przypadku znam podstawy MVC czy EF i nie wiem czy mam to umieszczać w swoim CV ?
Czwarte pytanie, czy wasze biura są przystosowane do osób niepełnosprawnych macie np windy?

0
somekind napisał(a):

No, ale DI w testach nie pomaga w ogóle... Jeśli testujesz jakąś klasę, to przecież zależności mockujesz, a nie wstrzykujesz z kontenera.

Pomaga, ale nie wprost. Aby umożliwić DI każdy serwis w konstruktorze wymaga podania serwisów, których sam używa. Wstrzyknięcie mocków tą samą drogą jest banalne i nie mam na myśli kontenera IoC, tylko wywołania konstruktora z mockami w argumentach. Jak byś sobie wyobrażał użycie mocków, jeśli testowany obiekt tworzyłby sam zależne obiekty i trzymał je w prywatnych zmiennych?

1 użytkowników online, w tym zalogowanych: 0, gości: 1