logo

MVC-designmönster

MVC-designmönstret är ett mjukvaruarkitekturmönster som delar upp en applikation i tre huvudkomponenter: Model, View och Controller, vilket gör det lättare att hantera och underhålla kodbasen. Det möjliggör också återanvändning av komponenter och främjar ett mer modulärt tillvägagångssätt för mjukvaruutveckling.



Viktiga ämnen för MVC Design Pattern

Vad är MVC Design Pattern?

De Model View Controller (MVC) designmönster anger att en applikation består av en datamodell, presentationsinformation och kontrollinformation. Mönstret kräver att var och en av dessa separeras i olika objekt.

  • MVC-mönstret delar upp problemen för en applikation i tre distinkta komponenter, som var och en ansvarar för en specifik aspekt av applikationens funktionalitet.
  • Denna separation av problem gör applikationen lättare att underhålla och utöka, eftersom ändringar av en komponent inte kräver ändringar av de andra komponenterna.

Komponenter i MVC Design Pattern



1. Modell

Modellkomponenten i designmönstret MVC (Model-View-Controller) representerar data och affärslogik för en applikation. Den ansvarar för att hantera applikationens data, bearbeta affärsregler och svara på förfrågningar om information från andra komponenter, såsom vyn och kontrollanten.

2. Visa

Visar data från modellen för användaren och skickar användarindata till styrenheten. Den är passiv och interagerar inte direkt med modellen. Istället tar den emot data från modellen och skickar användarindata till styrenheten för bearbetning.

3. Styrenhet

Styrenheten fungerar som en mellanhand mellan modellen och vyn. Den hanterar användarinmatning och uppdaterar modellen i enlighet därmed och uppdaterar vyn för att återspegla ändringar i modellen. Den innehåller applikationslogik, såsom indatavalidering och datatransformation.



Kommunikation mellan komponenterna

Detta kommunikationsflöde nedan säkerställer att varje komponent är ansvarig för en specifik aspekt av applikationens funktionalitet, vilket leder till en mer underhållbar och skalbar arkitektur

  • Användarinteraktion med View:
    • Användaren interagerar med vyn, som att klicka på en knapp eller skriva in text i ett formulär.
  • Visa tar emot användarinmatning:
    • Vyn tar emot användarinmatningen och vidarebefordrar den till styrenheten.
  • Controller bearbetar användarinmatning:
    • Styrenheten tar emot användarindata från vyn.
    • Den tolkar inmatningen, utför alla nödvändiga operationer (som att uppdatera modellen) och bestämmer hur den ska svara.
  • Kontrolleruppdateringsmodell:
    • Styrenheten uppdaterar modellen baserat på användarinmatning eller applikationslogik.
  • Modell meddelar vy av ändringar:
    • Om modellen ändras meddelar den vyn.
  • Visa förfrågningsdata från modellen:
    • Vyn begär data från modellen för att uppdatera dess visning.
  • Vy för kontrolluppdateringar:
    • Styrenheten uppdaterar vyn baserat på ändringarna i modellen eller som svar på användarinput.
  • Visa renderings uppdaterat gränssnitt:
    • Vyn återger det uppdaterade användargränssnittet baserat på ändringarna som gjorts av styrenheten.

Exempel på MVC Design Pattern

Nedan är koden för ovanstående problemformulering med MVC Design Pattern:

Låt oss dela upp i komponentens kod:

1. Modell (elevklass)

Representerar data (studentens namn och rullnummer) och tillhandahåller metoder för att komma åt och ändra dessa data.

Java


datumsträng java



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. Visa (StudentView-klass)

Representerar hur data (elevinformation) ska visas för användaren. Innehåller en metod ( printStudentDetails> ) för att skriva ut elevens namn och rullnummer.

Java




java medan skick
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. Controller (StudentController-klass)

Fungerar som en mellanhand mellan modellen och synen. Innehåller referenser till objekten Model och View. Tillhandahåller metoder för att uppdatera modellen (t.ex. setStudentName> , setStudentRollNo> ) och för att uppdatera vyn ( updateView> ).

Java




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());> >}> }>

>

sista nyckelordet i java
>

Komplett kod för exemplet ovan

Nedan är den fullständiga koden för exemplet ovan:

Java




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;> >}> }>

>

>

Produktion

skillnad mellan två strängar python




Student:> Name: Lokesh Sharma> Roll No: 15UCS157> Student:> Name: Vikram Sharma> Roll No: 15UCS157>

>

>

Fördelar med MVC Design Pattern

  • Dela upp problemen: MVC separerar de olika aspekterna av en applikation (data, användargränssnitt och logik), vilket gör koden lättare att förstå, underhålla och ändra.
  • Modularitet: Varje komponent (Modell, View, Controller) kan utvecklas och testas separat, vilket främjar kodåteranvändbarhet och skalbarhet.
  • Flexibilitet: Eftersom komponenterna är oberoende påverkar inte ändringar av en komponent de andra, vilket möjliggör enklare uppdateringar och modifieringar.
  • Parallell utveckling: Flera utvecklare kan arbeta på olika komponenter samtidigt, vilket påskyndar utvecklingsprocessen.
  • Kodåteranvändbarhet: Komponenterna kan återanvändas i andra delar av applikationen eller i olika projekt, vilket minskar utvecklingstid och ansträngning.

Nackdelar med MVC Design Pattern

  • Komplexitet: Implementering av MVC-mönstret kan lägga till komplexitet till koden, särskilt för enklare applikationer, vilket leder till overhead i utvecklingen.
  • Inlärningskurva: Utvecklare måste förstå konceptet med MVC och hur man implementerar det effektivt, vilket kan kräva ytterligare tid och resurser.
  • Över huvudet: Kommunikationen mellan komponenter (modell, vy, styrenhet) kan leda till overhead, vilket påverkar applikationens prestanda, särskilt i miljöer med begränsade resurser.
  • Potential för överteknik: I vissa fall kan utvecklare överkonstruera applikationen genom att lägga till onödiga abstraktioner och lager, vilket leder till uppsvälld kod som är svår att underhålla.
  • Ökat antal filer: MVC kan resultera i ett större antal filer och klasser jämfört med enklare arkitekturer, vilket kan göra projektstrukturen mer komplex och svårare att navigera.