Architektura MVC

Architektura MVC
forest.
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 2 lata
  • Postów:7
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.

WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:około 2 godziny
  • Postów:5139
1

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

Koontroler ma ogarnąć np. request http

edytowany 2x, ostatnio: WeiXiao
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
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.


Bo C to najlepszy język, każdy uczeń ci to powie
forest.
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 2 lata
  • Postów:7
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

Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około godziny
  • Postów:1875
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.


”Engineering is easy. People are hard.” Bill Coughran
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
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.


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: AnyKtokolwiek
Charles_Ray
To jeszcze warto rozdzielić model samej kontrolki (jakiś UserRow czy coś) od modelu domenowego (encja User, która jest persystowana do pliku).
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Silesia/Marki
  • Postów:5505
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.


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
edytowany 1x, ostatnio: KamilAdam
Charles_Ray
To jeszcze warto rozdzielić model samej kontrolki (jakiś UserRow czy coś) od modelu domenowego (encja User, która jest persystowana do pliku). - Charles_Ray
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
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.

Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Charles_Ray
Kontrolki maja tez swój „model”, API również jest pewnym „modelem” - nawet Evans o tym mówi :)
semicolon
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:114
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.

Charles_Ray
Co to są systemy danych?
semicolon
Bazy danych, kolejki, pamięć podręczna itd.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.