logo

MVC-designmønster

MVC-designmønsteret er et programvarearkitekturmønster som deler en applikasjon i tre hovedkomponenter: modell, visning og kontroller, noe som gjør det enklere å administrere og vedlikeholde kodebasen. Det gir også mulighet for gjenbruk av komponenter og fremmer en mer modulær tilnærming til programvareutvikling.



Viktige emner for MVC-designmønsteret

Hva er MVC-designmønsteret?

De Model View Controller (MVC) designmønster spesifiserer at en applikasjon består av en datamodell, presentasjonsinformasjon og kontrollinformasjon. Mønsteret krever at hver av disse deles i forskjellige objekter.

  • MVC-mønsteret deler bekymringene til en applikasjon i tre forskjellige komponenter, som hver er ansvarlig for et spesifikt aspekt av applikasjonens funksjonalitet.
  • Denne separasjonen av bekymringer gjør applikasjonen enklere å vedlikeholde og utvide, ettersom endringer i en komponent ikke krever endringer i de andre komponentene.

Komponenter i MVC-designmønsteret



1. Modell

Modellkomponenten i MVC-designmønsteret (Model-View-Controller) representerer dataene og forretningslogikken til en applikasjon. Den er ansvarlig for å administrere applikasjonens data, behandle forretningsregler og svare på forespørsler om informasjon fra andre komponenter, for eksempel View og Controller.

2. Vis

Viser dataene fra modellen til brukeren og sender brukerinndata til kontrolleren. Den er passiv og samhandler ikke direkte med modellen. I stedet mottar den data fra modellen og sender brukerinndata til kontrolleren for behandling.

3. Kontroller

Kontrolleren fungerer som en mellommann mellom modellen og visningen. Den håndterer brukerinndata og oppdaterer modellen deretter og oppdaterer visningen for å reflektere endringer i modellen. Den inneholder applikasjonslogikk, slik som inputvalidering og datatransformasjon.



Kommunikasjon mellom komponentene

Denne kommunikasjonsflyten nedenfor sikrer at hver komponent er ansvarlig for et spesifikt aspekt av applikasjonens funksjonalitet, noe som fører til en mer vedlikeholdbar og skalerbar arkitektur

  • Brukerinteraksjon med visning:
    • Brukeren samhandler med visningen, for eksempel ved å klikke på en knapp eller skrive inn tekst i et skjema.
  • Vis mottar brukerinndata:
    • Visningen mottar brukerinndata og videresender den til kontrolleren.
  • Kontrolleren behandler brukerinndata:
    • Kontrolleren mottar brukerinndata fra visningen.
    • Den tolker inndataene, utfører nødvendige operasjoner (som oppdatering av modellen), og bestemmer hvordan den skal svare.
  • Kontrolleroppdateringsmodell:
    • Kontrolleren oppdaterer modellen basert på brukerinndata eller applikasjonslogikk.
  • Modell varsler visning av endringer:
    • Hvis modellen endres, varsler den visningen.
  • Se forespørslersdata fra modellen:
    • Visningen ber om data fra modellen for å oppdatere visningen.
  • Kontrolleroppdateringsvisning:
    • Kontrolleren oppdaterer visningen basert på endringene i modellen eller som svar på brukerinndata.
  • Vis gjengivelses oppdatert brukergrensesnitt:
    • Visningen gjengir det oppdaterte brukergrensesnittet basert på endringene som er gjort av kontrolleren.

Eksempel på MVC Design Pattern

Nedenfor er koden for problemformuleringen ovenfor ved å bruke MVC Design Pattern:

La oss bryte ned i den komponentvise koden:

1. Modell (elevklasse)

Representerer dataene (studentens navn og rullenummer) og gir metoder for å få tilgang til og endre disse dataene.

Java


java date nå



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)

Representerer hvordan dataene (studentdetaljer) skal vises for brukeren. Inneholder en metode ( printStudentDetails> ) for å skrive ut elevens navn og rullenummer.

Java




regexp_like i mysql
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. Kontrollør (StudentController-klasse)

Fungerer som et mellomledd mellom modellen og utsikten. Inneholder referanser til Model- og View-objektene. Gir metoder for å oppdatere modellen (f.eks. setStudentName> , setStudentRollNo> ) og for å oppdatere visningen ( updateView> ).

Java

Java-opplæring for nybegynnere




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

>

>

Komplett kode for eksempelet ovenfor

Nedenfor er den komplette koden for eksemplet ovenfor:

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

>

>

Produksjon

java-inngang




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

>

>

Fordeler med MVC Design Pattern

  • Separasjon av bekymringer: MVC skiller de forskjellige aspektene ved en applikasjon (data, brukergrensesnitt og logikk), noe som gjør koden lettere å forstå, vedlikeholde og endre.
  • Modularitet: Hver komponent (modell, visning, kontroller) kan utvikles og testes separat, noe som fremmer gjenbrukbarhet og skalerbarhet av kode.
  • Fleksibilitet: Siden komponentene er uavhengige, påvirker ikke endringer i én komponent de andre, noe som gir enklere oppdateringer og modifikasjoner.
  • Parallell utvikling: Flere utviklere kan jobbe med forskjellige komponenter samtidig, noe som fremskynder utviklingsprosessen.
  • Gjenbrukbarhet av kode: Komponentene kan gjenbrukes i andre deler av applikasjonen eller i forskjellige prosjekter, noe som reduserer utviklingstid og innsats.

Ulemper med MVC Design Pattern

  • Kompleksitet: Implementering av MVC-mønsteret kan legge til kompleksitet til koden, spesielt for enklere applikasjoner, noe som fører til overhead i utviklingen.
  • Læringskurve: Utviklere må forstå konseptet med MVC og hvordan de implementerer det effektivt, noe som kan kreve ekstra tid og ressurser.
  • Overhead: Kommunikasjonen mellom komponenter (modell, visning, kontroller) kan føre til overhead, noe som påvirker ytelsen til applikasjonen, spesielt i miljøer med begrensede ressurser.
  • Potensial for over-engineering: I noen tilfeller kan utviklere overkonstruere applikasjonen ved å legge til unødvendige abstraksjoner og lag, noe som fører til oppblåst og vanskelig å vedlikeholde kode.
  • Økt filantall: MVC kan resultere i et større antall filer og klasser sammenlignet med enklere arkitekturer, noe som kan gjøre prosjektstrukturen mer kompleks og vanskeligere å navigere.