• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ocena projektu ASP.NET MVC

Object Storage Arubacloud
+1 głos
315 wizyt
pytanie zadane 13 sierpnia 2019 w C# przez Michał_Warmuz Mądrala (5,830 p.)

Cześć. Stworzyłem forum. Mam prośbę moglibyścię rzucić okiem i napisać co zrobiłem nie tak co mogę dodać albo usunąć. Cennie bardzo wasz opinie i chciałbym się czegoś nauczyć :) 

Z góry Dziękuje

https://github.com/Michal-Warmuz/Froum-v.1.0

2 odpowiedzi

+2 głosów
odpowiedź 14 sierpnia 2019 przez Rafajah Bywalec (2,090 p.)
wybrane 15 sierpnia 2019 przez Michał_Warmuz
 
Najlepsza

Przejrzałem tylko na szybko.

Bardzo fajnie, że wstrzykujesz sobie zależności (serwisy danych) do kontrolerów. To dobra technika.

Dobrze też, że masz wydzielone warstwy w projekcie za pomocą separacji oddzielnymi projektami (API, Services, Data)

Plus za projekt Tests ale minus, że nie ma w nim testów :D

Dobrze, że masz klasy ViewModeli, to dobra praktyka. Nie zaglądałem zbyt wiele w widoki, ale wierzę, że nie jest źle.

Były plusy to teraz uwagi.

Moim zdaniem zależności w takim projekcie powinny być następujące. Api/Front zależy od serwisów, serwisy zależą od danych, koniec. Przebudowałbym to tak, żeby Api nie miało zależności na dane. Po to mamy właśnie podział na warstwy.

Gdyby pojawiło się inne źródło danych to przerabiasz serwisy tak żeby ciągnęły dane z odpowiedniego źródła, a dla warstwy Api te zmiany są transparentne. Zakładając, że pracują nad tym różne osoby i ktoś jest odpowiedzialny tylko za API, nie musi uczestniczyć w tej pracy dostosowując swój projekt do zmian na linii Data -> Services.

Idąc tym tropem pojawia się jeszcze jeden problem. Zauważyłem, że kilka ViewModeli masz w projekcie Data.

Ja jakby rozumiem z czego to wynika. Potrzebujesz zwracać dane do wyświetlenia z bazy i to jest pierwsze rozwiązanie, które podsuwa intuicja.

Przerobiłeś już kwestię Dependency Injection. Pora na kolejny ważny temat, a mianowicie mapowanie danych.

W skrócie chodzi o to, że API powinno mieć swoje modele, serwisy swoje modele, a Data swoje modele, a pomiędzy tymi warstwami dane są mapowane. Można ułożyć to na przykład tak:

API ma ViewModels, serwisy mają Models, a Baza ma DbModels (nazwy przykładowe)

API potrafi mapować dane z ViewModels do Models i odwrotnie. Wszystko co przychodzi do API z Serwisów za pomocą serwisowych metody typu Get powinno przychodzi jako Models, tak samo jak wszystko co wychodzi z API do serwisów w metodach Create czy Set powinno być już przemapowane do Models.

Serwisy natomiast dane Data mapują przed przesłaniem dalej do API z DbModels na Models i odwrotnie, zapisując coś do bazy mapują z Models na DbModels. Można to wszystko robić ręcznie lub użyć np biblioteki AutoMapper i odpowiednio to pokonfigurować. Nie jest to trudniejsze niż konfiguracja Ninjecta więc wiedza na poziomie, nad którym aktualnie pracujesz.

No i te testy jednostkowe na przykład w NUnitcie. Jeśli to ma być projekt wizytówka i chcesz go by był Twoją wizytówką przy szukaniu pracy to na pewno warto to dodać.

Nie wszystko przejrzałem, pisałem dość na szybko i nie jestem wszechwiedzący więc za ewentualne błędy przepraszam ale też starałem się nie pisać jeśli nie byłem czegoś pewny.

Obczaj sobie też temat DTO (Data Transfer Object). Jest bezpośrednio związany z przesyłaniem danych między warstwami ale go nie poruszałem bo dawno nie miałem z nim do czynienia i mógłbym coś pokręcić :)

Wielkie dzięki za możliwość zajrzenia do Twojego kodu. Bardzo fajnie było spojrzeć i mam nadzieję, że pomogłem. Powodzenia i pozdrawiam :)

Bonus:

Chyba nie wgrałeś wszystkich plików na repo. Gdy próbowałem wejść w js'y to dostałem w mordę takim komunikatem:

komentarz 15 sierpnia 2019 przez Michał_Warmuz Mądrala (5,830 p.)
Po pierwsze Bardzo dziękuje. Bardzo za twój komentarz. Właśnie się teraz uczę testów jednostkowych :) . Faktycznie muszę się nauczyć mapowania danych kurcze wgl mi otworzyłeś na to oczy wcześniej o tym nie wiedziałem, muszę się tego nauczyć wielkie dzięki :)  Rany bardzo doceniam to że poświeciłeś czas aby przestudiować mój kod :)
+2 głosów
odpowiedź 14 sierpnia 2019 przez pulson666 Stary wyjadacz (12,560 p.)

Tak na szybko. W projekcie Forum.Data masz interfejsy które odpowiadają tabelką w bazie danych. Jest to naprawdę super pomysł by dodać pewną abstrakcję między wartstwami. Zauważ tylko, że za każdym razem musisz tworzyć taki interfejs, który defakto robi to samo. Może dobrze by było zastosować generyka oraz dziedziczenie ? :) 

komentarz 14 sierpnia 2019 przez Michał_Warmuz Mądrala (5,830 p.)
Kurcze masz rację dzięki poprawie to. Dziękuje że znalasłeś chwile obczaić program :)
komentarz 19 sierpnia 2019 przez pulson666 Stary wyjadacz (12,560 p.)
Powodzenia ! :)

Podobne pytania

0 głosów
1 odpowiedź 215 wizyt
pytanie zadane 13 stycznia 2023 w C# przez chrystian Gaduła (4,780 p.)
0 głosów
1 odpowiedź 221 wizyt
0 głosów
0 odpowiedzi 155 wizyt
pytanie zadane 27 grudnia 2020 w C# przez Jaqub09 Nowicjusz (120 p.)

92,563 zapytań

141,413 odpowiedzi

319,590 komentarzy

61,948 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...