MVC-designmønsteret er et softwarearkitekturmønster, der adskiller en applikation i tre hovedkomponenter: Model, View og Controller, hvilket gør det nemmere at administrere og vedligeholde kodebasen. Det giver også mulighed for genbrug af komponenter og fremmer en mere modulær tilgang til softwareudvikling.
Vigtige emner for MVC-designmønsteret
- Hvad er MVC-designmønsteret?
- Komponenter af MVC Design Pattern
- Kommunikation mellem komponenterne
- Eksempel på MVC Design Pattern
- Fordele ved MVC Design Pattern
- Ulemper ved MVC Design Pattern
Hvad er MVC-designmønsteret?
Det Model View Controller (MVC) designmønster specificerer, at en applikation består af en datamodel, præsentationsinformation og kontrolinformation. Mønsteret kræver, at hver af disse er adskilt i forskellige objekter.
- MVC-mønsteret opdeler en applikations bekymringer i tre forskellige komponenter, der hver især er ansvarlige for et specifikt aspekt af applikationens funktionalitet.
- Denne adskillelse af bekymringer gør applikationen nemmere at vedligeholde og udvide, da ændringer af en komponent ikke kræver ændringer af de andre komponenter.
Komponenter af MVC Design Pattern
1. Model
Modelkomponenten i MVC-designmønsteret (Model-View-Controller) repræsenterer en applikations data og forretningslogik. Det er ansvarligt for at administrere applikationens data, behandle forretningsregler og svare på anmodninger om oplysninger fra andre komponenter, såsom visningen og controlleren.
2. Udsigt
Viser data fra modellen til brugeren og sender brugerinput til controlleren. Den er passiv og interagerer ikke direkte med modellen. I stedet modtager den data fra modellen og sender brugerinput til controlleren til behandling.
3. Controller
Controlleren fungerer som mellemled mellem modellen og visningen. Den håndterer brugerinput og opdaterer modellen i overensstemmelse hermed og opdaterer visningen for at afspejle ændringer i modellen. Den indeholder applikationslogik, såsom inputvalidering og datatransformation.
Kommunikation mellem komponenterne
Dette kommunikationsflow nedenfor sikrer, at hver komponent er ansvarlig for et specifikt aspekt af applikationens funktionalitet, hvilket fører til en mere vedligeholdelsesvenlig og skalerbar arkitektur
- Brugerinteraktion med visning:
- Brugeren interagerer med visningen, såsom at klikke på en knap eller indtaste tekst i en formular.
- Vis modtager brugerinput:
- Visningen modtager brugerinput og videresender det til controlleren.
- Controller behandler brugerinput:
- Controlleren modtager brugerinput fra visningen.
- Den fortolker inputtet, udfører alle nødvendige handlinger (såsom opdatering af modellen) og beslutter, hvordan den skal reagere.
- Controlleropdateringsmodel:
- Controlleren opdaterer modellen baseret på brugerinput eller applikationslogik.
- Model giver besked om visning af ændringer:
- Hvis modellen ændres, giver den visningen besked.
- Se anmodningsdata fra model:
- Visningen anmoder om data fra modellen for at opdatere dens visning.
- Visning af controlleropdateringer:
- Controlleren opdaterer visningen baseret på ændringerne i modellen eller som svar på brugerinput.
- Se gengivelses opdateret brugergrænseflade:
- Visningen gengiver den opdaterede brugergrænseflade baseret på ændringerne foretaget af controlleren.
Eksempel på MVC Design Pattern
Nedenfor er koden for ovenstående problemformulering ved hjælp af MVC Design Pattern:
Lad os opdele i den komponentvise kode:
1. Model (elevklasse)
Repræsenterer dataene (elevens navn og rullenummer) og giver metoder til at få adgang til og ændre disse data.
Java
pseudokode 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. Vis (StudentView-klasse)
Repræsenterer, hvordan data (elevdetaljer) skal vises for brugeren. Indeholder en metode ( printStudentDetails>
) for at udskrive elevens navn og rullenummer.
Java
noget hurtig sortering
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 klasse)
Fungerer som mellemled mellem modellen og udsigten. Indeholder referencer til Model- og View-objekterne. Giver metoder til at opdatere modellen (f.eks. setStudentName>
, setStudentRollNo>
) og for at opdatere visningen ( updateView>
).
Java
Java tutorial for begyndere
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());> > }> }> |
>
>
Komplet kode til ovenstående eksempel
Nedenfor er den komplette kode for ovenstående eksempel:
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
javascript streng trim
Student:> Name: Lokesh Sharma> Roll No: 15UCS157> Student:> Name: Vikram Sharma> Roll No: 15UCS157> |
>
>
Fordele ved MVC Design Pattern
- Adskillelse af bekymringer: MVC adskiller de forskellige aspekter af en applikation (data, brugergrænseflade og logik), hvilket gør koden nemmere at forstå, vedligeholde og ændre.
- Modularitet: Hver komponent (model, visning, controller) kan udvikles og testes separat, hvilket fremmer kodegenbrug og skalerbarhed.
- Fleksibilitet: Da komponenterne er uafhængige, påvirker ændringer af én komponent ikke de andre, hvilket muliggør lettere opdateringer og ændringer.
- Parallel udvikling: Flere udviklere kan arbejde på forskellige komponenter samtidigt, hvilket fremskynder udviklingsprocessen.
- Genanvendelighed af kode: Komponenterne kan genbruges i andre dele af applikationen eller i forskellige projekter, hvilket reducerer udviklingstid og indsats.
Ulemper ved MVC Design Pattern
- Kompleksitet: Implementering af MVC-mønsteret kan tilføje kompleksitet til koden, især for enklere applikationer, hvilket fører til overhead i udviklingen.
- Indlæringskurve: Udviklere skal forstå begrebet MVC og hvordan man implementerer det effektivt, hvilket kan kræve ekstra tid og ressourcer.
- Overhead: Kommunikationen mellem komponenter (model, visning, controller) kan føre til overhead, hvilket påvirker applikationens ydeevne, især i miljøer med begrænsede ressourcer.
- Potentiale for over-engineering: I nogle tilfælde kan udviklere overkonstruere applikationen ved at tilføje unødvendige abstraktioner og lag, hvilket fører til oppustet og svær at vedligeholde kode.
- Øget filantal: MVC kan resultere i et større antal filer og klasser sammenlignet med enklere arkitekturer, hvilket kan gøre projektstrukturen mere kompleks og sværere at navigere.