MVC
Model-View-Controller zakłada podział aplikacji na trzy główne części:
Model – jest pewną reprezentacją problemu bądź logiki aplikacji.
Widok – opisuje, jak wyświetlić pewną część modelu w ramach interfejsu użytkownika. Może składać się z podwidoków odpowiedzialnych za mniejsze części interfejsu.
Kontroler – przyjmuje dane wejściowe od użytkownika i reaguje na jego poczynania, zarządzając aktualizacje modelu oraz odświeżenie widoków.
MVP
MVP, czyli z ang. Model-View-Presenter (Model-Widok-Prezenter) jest pochodną wzorca MVC. Modyfikacja polega na tym, że kontroler z MVC staje się teraz prezenterem. A to oznacza, że wszelkie wyniki logiki biznesowej aplikacji przesyłane są właśnie z tego prezentera, a nie jak w klasycznym wzorcu MVC – z modelu.
W teorii wydaje się proste, ale w praktyce już nie bardzo. Mógłby mi ktoś to wyjaśnić na jakimś przykładzie. Załóżmy, że mamy bazę danych, która przechowuje książki.
Teraz w MVC:
Model: Klasa odzwierciedlająca na przykład tabele książki, klasa z komunikacją do bazy danych (dodawanie, usuwanie, aktualizowanie itp).
Widok: Np jakaś ramka prezentująca nasze dane itp.
Kontroler: reagowanie na akcje użytkownika, na przykład na dodanie książki.
I tutaj się zastanawiam, załóżmy że w widoku mamy ramkę z przyciskiem dodaj książkę, czy to znaczy że obsługa tego przycisku (co się stanie po kliknięciu) powinna być w kontrolerze?
Jeśli tak, to jak mam to zrobić w osobnym pakiecie/klasie, jak pisałem obsługę przycisku w tej samej klasie to nie miałem problemu, bo mogłem napisać na przykład tak:
btnNastpna.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
//zrób coś
}
});
lub
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Zamknij")) {
System.exit(0);
} else if (e.getActionCommand().equals("...")) {
} else if (e.getActionCommand().equals("Połącz")) {
}