logo

Wzorzec projektowy MVC

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?

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.