Architektura MVC

0

Cześć,
Mam mały problem ze zrozumieniem MVC w Javie. Otóż, wzoruję się na tutorialu z tej stronki. Przykładowo mam klasę User ze zdefiniowanymi getterami i setterami. Jak rozumiem UserController powinien również zawierać takie same gettery i settery?
Dodatkowo chciałbym zapisać sobie takiego usera do pliku, stworzyć swego rodzaju bazę użytkowników. Jak najłatwiej to zrobić? Metoda zapisująca również w kontrollerze?

Mam książkę na temat wzorców projektowych, niestety skromnie jest tam napisane na temat MVC. Szukam praktycznych przykładów, przykładów jak rozbić kod na kontroller, model i view.

1

Kontroler nie ma nic do getterów i setterów Usera

Koontroler ma ogarnąć np. request http

0

View to jest to, co widać, i kod służący WYŚWIETLANIU
Model to dane, czyli User w liczbie pojedynczej lub mnogiej itd...
Controler dla aplikacji webowej, to jest to, co przyjmie od użytkownika zmiany, zaktualizuje co trzeba w Modelu, i wskaże, jaki View użyć.

generalnie wzorzec MVC jest czymś starszym niż aplikacje webowe, i na ich potrzeby założenia teoretycznie mocno się przetasowały.
Więc praktyczna odp na Twoje pytanie będzie się różnić w szczegółach, czy to web, czy (jak widzę tam się ujawniałeś) Android
I jeszcze, faktem jest, że daje klarowny rozwój projektu, ale nie róbmy z tego religii, są i inne wzorce w tych obszarach.

0

@WeiXiao: @AnyKtokolwiek: mówicie o zaawansowanej aplikacji webowej. Ja piszę prostą aplikację w swingu do zarządzania użytkownikami. Ma obsługiwać proste funkcjonalności typu dodawanie/edycje i zapis do pliku. W takim przypadku mam problem z podzieleniem czym powinien się zajmować kontroller z uwagi na to, że praktycznie wszystko mogę zrobić w klasie user

1

@forest.: to zrób, żeby działało, a potem sobie podziel - ew. wrzuć potem kod, to poradzimy. Modelowo powinny być 3 komponenty - widok zajmujący się renderowaniem kontrolek, model który reprezentuje dane i nic nie wie o tym jak jest wyświetlany i kontroler jako reakcje na akcje użytkownika.

0
forest. napisał(a):

@WeiXiao: @AnyKtokolwiek: mówicie o zaawansowanej aplikacji webowej. Ja piszę prostą aplikację w swingu do zarządzania użytkownikami. Ma obsługiwać proste funkcjonalności typu dodawanie/edycje i zapis do pliku. W takim przypadku mam problem z podzieleniem czym powinien się zajmować kontroller z uwagi na to, że praktycznie wszystko mogę zrobić w klasie user

Swing ma bardzo ciekawą koncepcję Modeli, wręcz uważam, że kto poćwiczy Swinga ma szansę nauczyć się czegoś poszerzającego horyzonty. Prawidłowo użyty Swing ma bardzo ładny model. Faktem jest że View & Controler mocno się zazębia. Ale na pewno nie "wkładaj wszystkiego" do Usera.
Każdy obiekt wizualny Swinga może mieć w zapleczu adekwatny Model - i niestety większość przykładów w sieci gwałci te zasady.
A np. Jtable nie wyobrażam sobie użyć bez mocnego wejścia w jej model.

5

Obaj (@Charles_Ray i @AnyKtokolwiek) powtórzyliście że Model to dane. Muszę się z tym nie zgodzić, bo gdzie wtedy powinna być logika biznesowa?
Aplikacja może mieć wiele par Widok-Kontroler (jedną do Weba z HTMLem, jedną do łączenia się za aplikacją mobilną, jedną do łączenia się z aplikacją desktopową), ale Model będzie miała wspólny. Bo Model w MVC bardziej odpowiada modelowi matematycznemu opisującemu problem, a więc to są nie tylko dane, ale też logika biznesowa i możliwe że logika aplikacji.

2

Szukaj pod hasłem "Swing MVC".
Przykładowe wyniki:
https://www.codeproject.com/Questions/633108/Java-Swing-MVC-application
https://www.oreilly.com/library/view/java-swing/156592455X/ch01s04.html

MVC to ograniczony opis architektury, zwykle występuje więcej komponentów w procesie.

  • Model - dane (POJO, Service, Repository, DAO, Entity, algorytm, walidacje), niezależne od interfejsu, klasy mogą generować zdarzenia (wzorzec Observable)
  • View - widok (Frame, HTML, CSS) - wszystko co jest ściśle związane z wyświetlaniem / drukowaniem
  • Controller - klasa spinająca w całość interakcję (nasłuchująca), odbiera zdarzenia od użytkownika i inicjuje proces w aplikacji

Klasyczne przykłady dla MVC będą ubogie, ponieważ nie uwzględniają tego że Model może (i powinien) zawierać logikę biznesową i pomijają interfejs do baz danych / plików.

6

Twierdzenie ze Model to "dane" to bzdura powtarzana za CRUDowymi tutorialami gdzie nie ma żadnej logiki biznesowej, więc faktycznie Model stanowią gołe dane. W praktyce Model to jest cała logika biznesowa aplikacji.

0

Po pierwsze MVC to nie jest architektura, a jedynie wzorzec architektoniczny. Samo pojęcie architektury w IT ma różne definicje. Ja postrzegam, że achitektura jest wszystkim co wyznacza kosztowne zmiany, czyli jeśli bazę ciężko jest wymienić wtedy taka baza stanowi element architektury w danym systemie. To co nie jest architekturę traktuję jak design i tu właśnie wrzuciłbym MVC.

Z wikipedii: system założeń, pojęć i zależności między nimi pozwalający opisać (modelować) w przybliżony sposób jakiś aspekt rzeczywistości. - i ja się z tym zgadzam.

Natomiast nie powiedziałbym, że cała logika biznesowa to model, logika biznesowa używa modeli do przeprowadzenia różnych zadań, ale tak samo po też drodze używa systemów danych - czy systemy danych to model? Absolutnie. To tylko miejsce.

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