Wzorzec projektowy MVC to wzorzec architektury oprogramowania, który dzieli aplikację na trzy główne komponenty: model, widok i kontroler, co ułatwia zarządzanie i utrzymywanie bazy kodu. Pozwala także na ponowne wykorzystanie komponentów i promuje bardziej modułowe podejście do tworzenia oprogramowania.
Ważne tematy dotyczące wzorca projektowego MVC
- Co to jest wzorzec projektowy MVC?
- Składniki wzorca projektowego MVC
- Komunikacja pomiędzy komponentami
- Przykład wzorca projektowego MVC
- Zalety wzorca projektowego MVC
- Wady wzorca projektowego MVC
Co to jest wzorzec projektowy MVC?
The Kontroler widoku modelu Wzorzec projektowy MVC określa, że aplikacja składa się z modelu danych, informacji prezentacyjnych i informacji sterujących. Wzór wymaga, aby każdy z nich został rozdzielony na różne obiekty.
- Wzorzec MVC dzieli problemy aplikacji na trzy odrębne komponenty, z których każdy odpowiada za określony aspekt funkcjonalności aplikacji.
- To rozdzielenie problemów sprawia, że aplikacja jest łatwiejsza w utrzymaniu i rozszerzaniu, ponieważ zmiany w jednym komponencie nie wymagają zmian w innych komponentach.
Składniki wzorca projektowego MVC
1. Modelka
Komponent Model we wzorcu projektowym MVC (Model-View-Controller) reprezentuje dane i logikę biznesową aplikacji. Odpowiada za zarządzanie danymi aplikacji, przetwarzanie reguł biznesowych i odpowiadanie na żądania informacji z innych komponentów, takich jak Widok i Kontroler.
2. Zobacz
Wyświetla dane z modelu użytkownikowi i wysyła dane wejściowe użytkownika do kontrolera. Jest pasywny i nie wchodzi w bezpośrednią interakcję z Modelem. Zamiast tego otrzymuje dane z Modelu i wysyła dane wejściowe użytkownika do Kontrolera w celu przetworzenia.
3. Kontroler
Kontroler pełni rolę pośrednika pomiędzy Modelem a Widokiem. Obsługuje dane wejściowe użytkownika i odpowiednio aktualizuje Model oraz aktualizuje Widok, aby odzwierciedlić zmiany w Modelu. Zawiera logikę aplikacji, taką jak walidacja danych wejściowych i transformacja danych.
Komunikacja pomiędzy komponentami
Poniższy przepływ komunikacji zapewnia, że każdy komponent jest odpowiedzialny za określony aspekt funkcjonalności aplikacji, co prowadzi do łatwiejszej w utrzymaniu i skalowalnej architektury
- Interakcja użytkownika z widokiem:
- Użytkownik wchodzi w interakcję z widokiem, na przykład klikając przycisk lub wprowadzając tekst do formularza.
- Widok otrzymuje dane wejściowe użytkownika:
- Widok odbiera dane wejściowe użytkownika i przekazuje je do kontrolera.
- Kontroler przetwarza dane wejściowe użytkownika:
- Kontroler otrzymuje dane wejściowe użytkownika z widoku.
- Interpretuje dane wejściowe, wykonuje wszelkie niezbędne operacje (takie jak aktualizacja modelu) i decyduje, jak zareagować.
- Model aktualizacji kontrolera:
- Kontroler aktualizuje Model w oparciu o dane wejściowe użytkownika lub logikę aplikacji.
- Model powiadamia widok zmian:
- Jeśli Model ulegnie zmianie, powiadomi Widok.
- Wyświetl dane żądań z modelu:
- Widok żąda danych od Modelu w celu aktualizacji jego wyświetlania.
- Widok aktualizacji kontrolera:
- Kontroler aktualizuje Widok w oparciu o zmiany w Modelu lub w odpowiedzi na dane wejściowe użytkownika.
- Wyświetl rendery Zaktualizowany interfejs użytkownika:
- Widok renderuje zaktualizowany interfejs użytkownika na podstawie zmian wprowadzonych przez kontrolera.
Przykład wzorca projektowego MVC
Poniżej znajduje się kod powyższego opisu problemu przy użyciu wzorca projektowego MVC:
Podzielmy kod na komponenty:
1. Model (klasa uczniów)
Reprezentuje dane (imię i nazwisko ucznia i numer rolki) oraz zapewnia metody dostępu i modyfikacji tych danych.
Jawa
Oracle SQL nie jest równy
class> Student {> > private> String rollNo;> > private> String name;> > public> String getRollNo() {> > return> rollNo;> > }> > public> void> setRollNo(String rollNo) {> > this> .rollNo = rollNo;> > }> > public> String getName() {> > return> name;> > }> > public> void> setName(String name) {> > this> .name = name;> > }> }> |
>
>
2. Widok (klasa StudentView)
Reprezentuje sposób, w jaki dane (dane ucznia) powinny być wyświetlane użytkownikowi. Zawiera metodę ( printStudentDetails>
), aby wydrukować imię i nazwisko ucznia oraz numer rolki.
Jawa
Wiek Vicky Kaushal
class> StudentView {> > public> void> printStudentDetails(String studentName, String studentRollNo) {> > System.out.println(> 'Student:'> );> > System.out.println(> 'Name: '> + studentName);> > System.out.println(> 'Roll No: '> + studentRollNo);> > }> }> |
>
>
3. Kontroler (klasa StudentController)
Działa jako pośrednik pomiędzy Modelem a Widokiem. Zawiera odniesienia do obiektów Model i View. Zapewnia metody aktualizacji modelu (np. setStudentName>
, setStudentRollNo>
) i zaktualizować widok ( updateView>
).
Jawa
zrobić w Javie
class> StudentController {> > private> Student model;> > private> StudentView view;> > public> StudentController(Student model, StudentView view) {> > this> .model = model;> > this> .view = view;> > }> > public> void> setStudentName(String name) {> > model.setName(name);> > }> > public> String getStudentName() {> > return> model.getName();> > }> > public> void> setStudentRollNo(String rollNo) {> > model.setRollNo(rollNo);> > }> > public> String getStudentRollNo() {> > return> model.getRollNo();> > }> > public> void> updateView() {> > view.printStudentDetails(model.getName(), model.getRollNo());> > }> }> |
>
>
Kompletny kod dla powyższego przykładu
Poniżej znajduje się pełny kod powyższego przykładu:
Jawa
class> Student {> > private> String rollNo;> > private> String name;> > public> String getRollNo() {> > return> rollNo;> > }> > public> void> setRollNo(String rollNo) {> > this> .rollNo = rollNo;> > }> > public> String getName() {> > return> name;> > }> > public> void> setName(String name) {> > this> .name = name;> > }> }> class> StudentView {> > public> void> printStudentDetails(String studentName, String studentRollNo) {> > System.out.println(> 'Student:'> );> > System.out.println(> 'Name: '> + studentName);> > System.out.println(> 'Roll No: '> + studentRollNo);> > }> }> class> StudentController {> > private> Student model;> > private> StudentView view;> > public> StudentController(Student model, StudentView view) {> > this> .model = model;> > this> .view = view;> > }> > public> void> setStudentName(String name) {> > model.setName(name);> > }> > public> String getStudentName() {> > return> model.getName();> > }> > public> void> setStudentRollNo(String rollNo) {> > model.setRollNo(rollNo);> > }> > public> String getStudentRollNo() {> > return> model.getRollNo();> > }> > public> void> updateView() {> > view.printStudentDetails(model.getName(), model.getRollNo());> > }> }> public> class> MVCPattern {> > public> static> void> main(String[] args) {> > Student model = retriveStudentFromDatabase();> > StudentView view => new> StudentView();> > StudentController controller => new> StudentController(model, view);> > controller.updateView();> > controller.setStudentName(> 'Vikram Sharma'> );> > controller.updateView();> > }> > private> static> Student retriveStudentFromDatabase() {> > Student student => new> Student();> > student.setName(> 'Lokesh Sharma'> );> > student.setRollNo(> '15UCS157'> );> > return> student;> > }> }> |
>
>
Wyjście
losowy kod c
Student:> Name: Lokesh Sharma> Roll No: 15UCS157> Student:> Name: Vikram Sharma> Roll No: 15UCS157> |
>
>
Zalety wzorca projektowego MVC
- Oddzielenie obaw: MVC oddziela różne aspekty aplikacji (dane, interfejs użytkownika i logika), dzięki czemu kod jest łatwiejszy do zrozumienia, utrzymania i modyfikowania.
- Modułowość: Każdy komponent (Model, Widok, Kontroler) można opracować i przetestować osobno, co promuje możliwość ponownego użycia i skalowalność kodu.
- Elastyczność: Ponieważ komponenty są niezależne, zmiany w jednym komponencie nie wpływają na inne, co pozwala na łatwiejsze aktualizacje i modyfikacje.
- Rozwój równoległy: Wielu programistów może pracować jednocześnie nad różnymi komponentami, co przyspiesza proces programowania.
- Możliwość ponownego wykorzystania kodu: Komponenty można ponownie wykorzystać w innych częściach aplikacji lub w różnych projektach, skracając czas i wysiłek programistyczny.
Wady wzorca projektowego MVC
- Złożoność: Implementacja wzorca MVC może zwiększyć złożoność kodu, szczególnie w przypadku prostszych aplikacji, prowadząc do narzutów w rozwoju.
- Krzywa uczenia się: Programiści muszą zrozumieć koncepcję MVC i sposób jej skutecznego wdrożenia, co może wymagać dodatkowego czasu i zasobów.
- Nad głową: Komunikacja między komponentami (modelem, widokiem, kontrolerem) może prowadzić do narzutów, wpływających na wydajność aplikacji, szczególnie w środowiskach o ograniczonych zasobach.
- Potencjał nadmiernej inżynierii: W niektórych przypadkach programiści mogą przesadzić z projektowaniem aplikacji, dodając niepotrzebne abstrakcje i warstwy, co prowadzi do rozdętego i trudnego w utrzymaniu kodu.
- Zwiększona liczba plików: MVC może skutkować większą liczbą plików i klas w porównaniu z prostszymi architekturami, co może sprawić, że struktura projektu będzie bardziej złożona i trudniejsza w nawigacji.