Przewodnik dla początkujących po architekturze MVC w Javie
Opublikowany: 2018-04-10Jeśli jesteś związany ze sceną tworzenia stron internetowych, z pewnością natknąłeś się na akronim „MVC” setki razy, jeśli nie więcej. MVC jest jednym z najczęściej omawianych wzorców projektowych w dzisiejszym świecie programowania internetowego i słusznie. W tym artykule przeprowadzimy Cię przez świat architektury MVC. Porozmawiamy o podstawach MVC, jego zaletach, a na koniec o prostym kodzie, który pomoże ci lepiej zrozumieć implementację MVC w Javie.
Spis treści
Czym dokładnie jest architektura MVC?
Zanim przejdziemy do szczegółów technicznych, wyjaśnijmy kilka rzeczy – MVC NIE jest wzorcem projektowym, to sposób na uporządkowanie aplikacji. W ostatnich latach aplikacje internetowe intensywnie wykorzystują architekturę MVC, dlatego naturalnym jest pomylenie jej z wzorcem projektowym przeznaczonym wyłącznie dla aplikacji internetowych. Powiedzmy jednak, że MVC zostało po raz pierwszy opisane w 1979 roku – przed erą WWW, kiedy nie było koncepcji aplikacji internetowych. Architektura używana dzisiaj dla aplikacji internetowych jest adaptacją oryginalnego wzorca.
W rzeczywistości ta architektura była początkowo zawarta w dwóch głównych frameworkach do tworzenia stron internetowych — Struts i Ruby on Rails. Te dwa środowiska utorowały drogę dla większości frameworków internetowych, które pojawiły się później – i tym samym popularność tej architektury stale rosła.
Wzorzec architektoniczny MVC jest zgodny z podstawową ideą – musimy rozdzielić obowiązki w dowolnej aplikacji na podstawie:
- Model: obsługuje dane i logikę biznesową.
- Widok: przedstawia dane użytkownikowi na żądanie.
- Kontroler: Odbiera żądania użytkowników i pobiera niezbędne zasoby.
Każdy z komponentów ma wydzielony zestaw zadań, co zapewnia płynne działanie całej aplikacji wraz z pełną modułowością. Przyjrzyjmy się dokładniej każdemu z tych elementów.
Kontroler
Kontroler jest jak gospodyni aplikacji – wykonuje koordynację między modelem i widokiem, aby obsłużyć żądanie użytkownika. Żądania użytkownika są odbierane jako żądanie HTTP get lub post – na przykład, gdy użytkownik kliknie dowolny element GUI, aby wykonać dowolną akcję.
Podstawową funkcją kontrolera jest wywoływanie i koordynowanie z modelem w celu pobrania wszelkich niezbędnych zasobów wymaganych do działania. Zwykle, po otrzymaniu żądania użytkownika, kontroler wywołuje odpowiedni model dla danego zadania.
Model
Model to po prostu dane dla naszej aplikacji. Dane są „modelowane” w taki sposób, aby można je było łatwo przechowywać, pobierać i edytować. Model to sposób, w jaki stosujemy reguły do naszych danych, co ostatecznie reprezentuje koncepcje, którymi zarządza nasza aplikacja.
W przypadku dowolnej aplikacji wszystko jest modelowane jako dane, które można łatwo obsługiwać. Co to jest użytkownik, książka lub wiadomość dla aplikacji? Tak naprawdę nic, tylko dane, które muszą być przetwarzane według określonych reguł. Na przykład data nie może być późniejsza niż bieżąca, e-mail musi być w odpowiednim formacie, nazwa nie może być dłuższa niż „x” znaków itp.
Za każdym razem, gdy użytkownik wysyła jakiekolwiek żądanie do kontrolera, kontaktuje się z odpowiednim modelem, który zwraca reprezentację danych tego, czego zażądał użytkownik. Model ten będzie taki sam dla konkretnego dzieła, niezależnie od tego, jak chcemy go wyświetlić użytkownikowi. Dlatego możemy wybrać dowolny dostępny widok do renderowania danych modelu.
Ponadto model zawiera również logikę aktualizacji odpowiedniego kontrolera za każdym razem, gdy nastąpi jakakolwiek zmiana w danych modelu.

Pogląd
Jak sama nazwa wskazuje, widok odpowiada za renderowanie danych otrzymanych z modelu. Mogą istnieć wstępnie zaprojektowane szablony, w których można dopasować dane, a nawet może istnieć kilka różnych widoków na model, w zależności od wymagań.
Każda aplikacja internetowa jest ustrukturyzowana z uwzględnieniem tych trzech podstawowych komponentów. Może istnieć kontroler główny, który jest odpowiedzialny za odbieranie wszystkich żądań i wywoływanie określonego kontrolera w celu wykonania określonych akcji. Lepiej zrozummy działanie aplikacji internetowej w architekturze MVC na przykładzie.
Zobaczmy przykład
Weźmy za przykład sklep internetowy z artykułami papierniczymi. Użytkownik może przeglądać przedmioty, kupować, dodawać przedmioty do koszyka, dodawać przedmioty do bieżącego zamówienia, a nawet dodawać/usuwać przedmioty (jeśli jest administratorem).
Zobaczmy teraz, co się stanie, gdy użytkownik kliknie tytuł „Pióra”, aby wyświetlić listę piór.
Nasza aplikacja będzie miała specjalny kontroler do obsługi wszystkich zapytań związanych z długopisami. Powiedzmy, że nazywa się „pens_controller.php”. Będziemy mieli też model, który będzie przechowywał dane dotyczące posiadanych przez nas długopisów – nazwijmy go „pens_model.php”. Na koniec będziemy mieli kilka widoków do prezentacji danych – listę pisaków, tabelę wyświetlającą pisaki, stronę do edycji listy itp.
Poniższy rysunek przedstawia pełny przepływ kontroli od momentu kliknięcia przez użytkownika „długopisu”, do momentu wyświetlenia przed nim wyniku:
Po pierwsze, „pens_controller.php” obsługuje żądanie użytkownika (1) jako żądanie GET lub POST. Możemy również mieć „index.php”, który jest centralnym kontrolerem, który w razie potrzeby wywoła „pens_controller”.
Następnie kontroler analizuje żądanie oraz parametry i wywołuje wymagany model – w tym przypadku „pens_model.php”. Kontroler prosi model o zwrócenie listy dostępnych pisaków (2).
Teraz model przeszukuje bazę danych w poszukiwaniu niezbędnych informacji (3), w razie potrzeby stosuje logikę i zwraca dane do kontrolera (4).
Następnie kontroler wybiera odpowiedni widok (5) i prezentuje dane (6 i 7). Jeśli żądanie pochodzi z urządzenia przenośnego, zostanie użyty odpowiedni dla niego widok lub jeśli użytkownik wybrał określony motyw, jego widok zostanie wybrany – i tak dalej.
Jak zostać programistą Full Stack
Zalety architektury MVC
Częstym problemem, z jakim borykają się obecnie twórcy aplikacji, jest obsługa różnych typów urządzeń. Architektura MVC rozwiązuje ten problem, ponieważ programiści mogą tworzyć różne interfejsy dla różnych urządzeń, a na podstawie urządzenia, z którego wysyłane jest żądanie, kontroler wybierze odpowiedni widok. Model wysyła te same dane niezależnie od używanego urządzenia, co zapewnia pełną spójność na wszystkich urządzeniach.
Separacja MVC pięknie izoluje widok od logiki biznesowej. Zmniejsza również złożoność projektowania dużych aplikacji, zachowując strukturę kodu i przepływu pracy. Dzięki temu cały kod jest znacznie łatwiejszy w utrzymaniu, testowaniu, debugowaniu i ponownym użyciu.
Prosta implementacja MVC przy użyciu Java
Będziemy mieć następujące trzy:
- StudentObject : model.
- StudentView: wyświetl klasę, aby wydrukować szczegóły na konsoli.
- StudentController: kontroler, który przechowuje dane w studentObject i odpowiednio aktualizuje StudentView
Krok 1: Stwórz model

klasa publiczna uczeń { private String rollNo ; prywatne Nazwa ciągu ; public String getRollNo () { rolka zwrotnaNie ; } public void setRollNo ( String rollNo ) { to . nr rolki = nr rolki ; } public String getName () { zwróć imię ; } public void setName ( nazwa ciągu ) { to . nazwa = nazwa ; } }
Kod nie wymaga wyjaśnień. Składa się z funkcji umożliwiających uzyskanie/ustawienie numeru rzutu i nazwisk uczniów. Nazwijmy to „student.java”.
Krok 2: Utwórz widok
klasa publiczna StudentView { public void printStudentDetails ( String StudentName , String studentRollNo ){ System . się . println ( "Student: " ); System . się . println ( "Nazwa: " + StudentName ); System . się . println ( "Roll No: " + studentRollNo ); } }
Jest to po prostu wydrukowanie wartości na konsoli. Nazwijmy to „studentView.java”.
Krok 3: Utwórz kontroler
public class StudentController { prywatny model Studenta ; prywatny widok StudentView ; public StudentController ( model Student , widok StudentView ){ to . model = model ; to . widok = widok ; } public void setStudentName ( nazwa ciągu ){ model . setName ( nazwa ); } public String getStudentName (){ model zwrotu . pobierzNazwę (); } public void setStudentRollNo ( String rollNo ){ model . setRollNo ( rollNo ); } public String getStudentRollNo (){ model zwrotu . pobierzRollNo (); } public void updateView (){ widok . printStudentDetails ( model .getName (), model .getRollNo ( )) ; } }
Nazwij to „StudentController.java”. Pobieżny rzut oka powie ci, że ten kontroler jest po prostu odpowiedzialny za wywołanie modelu w celu pobrania/ustawienia danych, a następnie zaktualizowania widoku.
Przyjrzyjmy się teraz, jak to wszystko jest ze sobą powiązane.
Krok 4: Utwórz główny plik Java
klasa publiczna MVCPatternDemo { public static void main ( String [] args ) { //pobierz rekord ucznia na podstawie jego numeru z bazy danych Model ucznia = retriveStudentFromDatabase (); //Utwórz widok: aby zapisać dane ucznia na konsoli Widok StudentView = nowy StudentView (); StudentController controller = nowy StudentController ( model , widok ); kontroler . aktualizacjaWidok (); //zaktualizuj dane modelu kontroler . setStudentName ( "Jan" ); kontroler . aktualizacjaWidok (); } prywatny static Student odzyskajStudentFromDatabase (){ Student student = nowy Student (); student . setName ( "Robert" ); student . setRollNo ( "10" ); powrót studenta ; } }
Nazywa się to „MVCPatternDemo.java”. Jak widać, pobiera dane ucznia z bazy danych lub funkcji (w tym przypadku używamy funkcji do ustawienia wartości) i przesyła je do modelu Studenta. Następnie inicjuje widok, który stworzyliśmy wcześniej.
Co więcej, inicjuje również nasz kontroler i wiąże go z modelem i widokiem. Metoda updateView() jest częścią kontrolera, która aktualizuje dane ucznia na konsoli.
Krok 5: Sprawdź wynik
Jeśli wszystko pójdzie dobrze, wynik powinien być następujący:

Student: Imię i nazwisko: Robert Nr rolki: 10 Student: Imię: Jan Nr rolki: 10
Jeśli otrzymasz to jako wynik, gratulacje! Pomyślnie zaimplementowałeś architekturę MVC przy użyciu Javy, aczkolwiek dla prostej aplikacji. Jakkolwiek prosta, ta aplikacja wystarczy, aby zademonstrować możliwości architektury MVC.
15 pytań do wywiadu MVC, które musisz znać na wiosnę
Podsumowanie…
Po tak wielu powiedzianych i zrobionych, trudno jest obecnie podkreślić moc architektury MVC w jakiejkolwiek aplikacji webowej/desktopowej. Zapewnia całkowicie nowy poziom modułowości kodu, co czyni go o wiele bardziej czytelnym i łatwiejszym w utrzymaniu. Tak więc, jeśli chcesz osiągnąć nowe wyżyny w swojej karierze jako programista aplikacji, zdobycie architektury MVC i jej działanie powinno być Twoim najwyższym priorytetem.
Zapisz się na kursy inżynierii oprogramowania z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.
Wpadnij do komentarza i daj nam znać, jak podoba Ci się ten artykuł!
