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

MVC - czy dobrze to zrobiłem? ToDoApp - review

Object Storage Arubacloud
0 głosów
269 wizyt
pytanie zadane 14 września 2018 w Java przez must Bywalec (2,980 p.)

Cześć. Zrobiłem ToDoAppkę na podstawie wzorca MVC. Chciałbym abyście sprawdzili, czy ten pull request jest dobry.

Przedtem w klasie ToDoView pobierałem od użytkownika dane. Teraz wiem, ze powinno się to znajdować w kontrolerze, dlatego wszystko to przeniosłem do kontrolera właśnie, a w klasie ToDoView pozostawiłem metody tylko do wypisywania.

Dodałem także TaskController, ponieważ w klasie ToDoController znajdowało się już zbyt wiele rzeczy.

Co o tym myślicie?

Tutaj link do pull requesta: https://github.com/must1/ToDoApplication/pull/4

1 odpowiedź

+1 głos
odpowiedź 14 września 2018 przez mbabane Szeryf (79,280 p.)
wybrane 15 września 2018 przez must
 
Najlepsza
Edit usunąłem to bo patrzyłem na zły branch i w sumie nie miało to już sensu.

Zerknij na ten przykładzik, zauważ, że widok tylko drukuje komunikaty, a dane pobiera kontroler i zarządza co i kiedy ma być wyświetlane (w zależności od akcji użytkownika):

https://github.com/mbabanes/java-examples/tree/master/src/main/java/console
komentarz 16 września 2018 przez mbabane Szeryf (79,280 p.)

Chodzi Ci, że np. w klasie Main zrobić 3 metody, które zwracają 3 kontrolery?

Tak.

 

Tak chodziło o Taskera, staram się pisać ogólnymi pojęciami własnie żebyś lepiej rozumiał.

Czy pobieranie z modelu logowania byłoby złym pomysłem?

Nie wydaje mi się. Skądś to trzeba wziąć więc model, według mnie, jest sensowniejszy niż kontroler czy widok.

komentarz 16 września 2018 przez must Bywalec (2,980 p.)
W takim razie, dodam po prostu model logowania do taska, bo w sumie zarządzanie taskami opiera się na logowaniu, czyli jest od niego zależne.
komentarz 16 września 2018 przez mbabane Szeryf (79,280 p.)
Zadaj sobie tylko pytanie, czy uzależnianie od skomplikowanego modelu LoginModel (skomplikowanego w sensie, że są w nim także operacje z których nie powinno się korzystać w innym miejscu niż przeznaczony do tego kontroler) jest lepsze niż przekazanie prostego obiektu z danymi użytkownika.
komentarz 16 września 2018 przez must Bywalec (2,980 p.)

Zgadzam się, ale rozwiązanie które podałeś, czyli: 

TaskManagmentModel tmm = new TaskManagmentModel(loginModel.getConnectedUser() );
      TaskManagmentController taskManagementController = new TaskManagementController(toDoView, tmm);

robi zamęt w switchu.

Jeżeli chodzi o drugie rozwiązanie czyli:


taskManagementController.getModel().setUser(user);

to tutaj już nie bardzo wiem jak to ma wyglądać w środku.

Poza tym, przekazujesz obiekt usera, a ja w głównym kontrolerze nie mam żadnego obiektu. Wszystko sprowadza się do modelu logowania, bo tam ten obiekt użytkownika jest.

 

1
komentarz 16 września 2018 przez mbabane Szeryf (79,280 p.)

Mam wrażenie że Ty cały czas operujesz tylko na tym co masz w kodzie i stąd Twoje niezrozumienie. Cały czas staram się mówić ogólnie, a Ty próbujesz to łączyć z tym co masz aktualnie - podkreślam aktualnie - w kodzie (przyznam się, że trochę zaczynam się irytować).

 

MVC- jeszcze raz - Model Widok Kontroler - każdy kontroler ma w sobie Widok i Model więc coś takiego:

taskManagementController.getModel();

Może dawać do zrozumienia że z kontrolera pobieram instancje jego modelu - a jak nazwiesz ten model to już Twoja rzecz.

Popatrz na to bardziej ogólnie.

I w sumie czemu zagmatwa? Bo będzie w nim więcej niż jedna linia? To można to przenieść do jakieś klasy fabrycznej:

class TaskManagmentFactory
{
       public static TaskManagmentController createTaskControllerFor(User currentUser)
        {
               TaskRepo taskRepo = new TaskRepImpl();
               TaskModel taskModel = new TaskModel(taskRepo, currentUser);
               TaskView taskView = new TaskView();

                return new TaskManagmentController(taskView, taskModel);
         }
}

//wtedy w switchu masz prosty kod;

case LOGIN:
   loginModel.login(username, password);
              
   TaskManagmentController tmc = TaskManagmentFactory.createTaskControllerFor(loginModel.getConnectedUser());
   tmc.executeAction();
   break;

 

Podobne pytania

0 głosów
0 odpowiedzi 97 wizyt
pytanie zadane 20 lipca 2020 w PHP przez Filipczak Gaduła (4,020 p.)
0 głosów
2 odpowiedzi 612 wizyt
pytanie zadane 6 lipca 2018 w Java przez must Bywalec (2,980 p.)
0 głosów
1 odpowiedź 1,567 wizyt
pytanie zadane 2 października 2018 w Java przez allenkun Początkujący (400 p.)

92,536 zapytań

141,376 odpowiedzi

319,451 komentarzy

61,920 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!

...