logo

Oblikovalski vzorec MVC

Načrtovalni vzorec MVC je vzorec programske arhitekture, ki loči aplikacijo na tri glavne komponente: model, pogled in krmilnik, kar olajša upravljanje in vzdrževanje kodne baze. Omogoča tudi ponovno uporabo komponent in spodbuja bolj modularen pristop k razvoju programske opreme.



Pomembne teme za načrtovalni vzorec MVC

Kaj je vzorec oblikovanja MVC?

The Krmilnik pogleda modela (MVC) vzorec načrtovanja določa, da je aplikacija sestavljena iz podatkovnega modela, predstavitvenih informacij in kontrolnih informacij. Vzorec zahteva, da je vsak od teh ločen na različne predmete.

  • Vzorec MVC loči zadeve aplikacije na tri različne komponente, od katerih je vsaka odgovorna za določen vidik funkcionalnosti aplikacije.
  • Ta ločitev pomislekov olajša vzdrževanje in razširitev aplikacije, saj spremembe ene komponente ne zahtevajo sprememb drugih komponent.

Komponente vzorca načrtovanja MVC



1. Model

Komponenta modela v vzorcu oblikovanja MVC (Model-View-Controller) predstavlja podatke in poslovno logiko aplikacije. Odgovoren je za upravljanje podatkov aplikacije, obdelavo poslovnih pravil in odzivanje na zahteve po informacijah iz drugih komponent, kot sta View in Controller.

2. Pogled

Prikaže podatke iz modela uporabniku in pošlje uporabniške vnose krmilniku. Je pasiven in nima neposredne interakcije z modelom. Namesto tega prejme podatke iz modela in pošlje uporabniške vnose krmilniku v obdelavo.

3. Krmilnik

Krmilnik deluje kot posrednik med modelom in pogledom. Obravnava uporabniški vnos in ustrezno posodobi model ter posodobi pogled, da odraža spremembe v modelu. Vsebuje logiko aplikacije, kot sta preverjanje vnosa in pretvorba podatkov.



Komunikacija med komponentami

Ta spodnji komunikacijski tok zagotavlja, da je vsaka komponenta odgovorna za določen vidik funkcionalnosti aplikacije, kar vodi do bolj vzdržljive in razširljive arhitekture

  • Interakcija uporabnika s pogledom:
    • Uporabnik komunicira s pogledom, na primer klikne gumb ali vnese besedilo v obrazec.
  • Pogled prejme uporabniški vnos:
    • Pogled prejme uporabniški vnos in ga posreduje krmilniku.
  • Krmilnik obdeluje uporabniški vnos:
    • Krmilnik prejme uporabniški vnos iz pogleda.
    • Interpretira vnos, izvede vse potrebne operacije (kot je posodabljanje modela) in se odloči, kako se odzvati.
  • Model posodobitve krmilnika:
    • Krmilnik posodobi model na podlagi uporabniškega vnosa ali logike aplikacije.
  • Model obvesti pogled o spremembah:
    • Če se model spremeni, o tem obvesti pogled.
  • Ogled podatkov o zahtevah iz modela:
    • Pogled zahteva podatke od modela, da posodobi svoj prikaz.
  • Pogled posodobitev krmilnika:
    • Krmilnik posodobi pogled na podlagi sprememb v modelu ali kot odgovor na vnos uporabnika.
  • Pogled upodablja posodobljen uporabniški vmesnik:
    • Pogled upodobi posodobljen uporabniški vmesnik na podlagi sprememb, ki jih je naredil krmilnik.

Primer vzorca oblikovanja MVC

Spodaj je koda zgornje izjave o problemu z uporabo vzorca oblikovanja MVC:

Razčlenimo kodo komponent:

1. Model (študentski razred)

Predstavlja podatke (ime študenta in številko imenika) in nudi metode za dostop do teh podatkov in njihovo spreminjanje.

Java


java logični niz



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. Pogled (razred StudentView)

Predstavlja, kako naj bodo podatki (podrobnosti o študentu) prikazani uporabniku. Vsebuje metodo ( printStudentDetails> ), da natisnete ime in številko študenta.

Java




css komentar
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. Krmilnik (razred StudentController)

Deluje kot posrednik med modelom in pogledom. Vsebuje sklice na objekte Model in Pogled. Zagotavlja metode za posodobitev modela (npr. setStudentName> , setStudentRollNo> ) in za posodobitev pogleda ( 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());> >}> }>

>

kako vrniti matriko v javi
>

Popolna koda za zgornji primer

Spodaj je celotna koda za zgornji primer:

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

>

>

Izhod

gumb na sredini css




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

>

>

Prednosti vzorca oblikovanja MVC

  • Ločitev pomislekov: MVC loči različne vidike aplikacije (podatke, uporabniški vmesnik in logiko), zaradi česar je koda lažja za razumevanje, vzdrževanje in spreminjanje.
  • Modularnost: Vsako komponento (model, pogled, krmilnik) je mogoče razviti in preizkusiti ločeno, kar spodbuja ponovno uporabo in razširljivost kode.
  • Prilagodljivost: Ker so komponente neodvisne, spremembe ene komponente ne vplivajo na druge, kar omogoča lažje posodobitve in modifikacije.
  • Vzporedni razvoj: Več razvijalcev lahko dela na različnih komponentah hkrati, kar pospeši razvojni proces.
  • Ponovna uporabnost kode: Komponente je mogoče ponovno uporabiti v drugih delih aplikacije ali v različnih projektih, kar zmanjša čas in trud pri razvoju.

Slabosti vzorca oblikovanja MVC

  • Kompleksnost: Implementacija vzorca MVC lahko dodatno zaplete kodo, zlasti pri enostavnejših aplikacijah, kar povzroči dodatne stroške pri razvoju.
  • Krivulja učenja: Razvijalci morajo razumeti koncept MVC in kako ga učinkovito implementirati, kar lahko zahteva dodaten čas in sredstva.
  • režijski stroški: Komunikacija med komponentami (model, pogled, krmilnik) lahko privede do dodatnih stroškov, kar vpliva na delovanje aplikacije, zlasti v okoljih z omejenimi viri.
  • Potencial za pretirano inženirstvo: V nekaterih primerih lahko razvijalci pretirano načrtujejo aplikacijo z dodajanjem nepotrebnih abstrakcij in plasti, kar povzroči napihnjeno kodo, ki jo je težko vzdrževati.
  • Povečano število datotek: MVC lahko povzroči večje število datotek in razredov v primerjavi s preprostejšimi arhitekturami, zaradi česar je lahko struktura projekta bolj zapletena in težja za krmarjenje.