Arhitektura Model-View-Controller (MVC) je eden izmed najbolj priljubljenih vzorcev razvoja programske opreme. Logika arhitekture MVC uporablja načelo oblikovanja ločevanja pomislekov. Namen tega načela je ločiti vlogo na okrožne odseke, kjer vsak razdelek obravnava posebno in ločeno vprašanje.

Arhitektura MVC sledi načelu ločevanja pomislekov do črke. Pravzaprav vsaka črka v kratici MVC predstavlja bistven del vaše aplikacije. Ta članek podrobno raziskuje vsak del arhitekture MVC in vam pokaže, kako jih uporabite za razvoj programske opreme.

Kaj je model?

Model arhitekture MVC je glavni sestavni del vzorca načrtovanja. To je zato, ker model vaše aplikacije shranjuje podatkovno logiko. Model narekuje, kako shranjujete in pridobivate svoje podatke.

Za aplikacijo, ki uporablja arhitekturo krmilnika MVC, so podatki bistvena sestavina njenega delovanja.

Kaj je pogled?

Pogled arhitekture MVC je uporabniški vmesnik (UI) vaše aplikacije. Uporabniški vmesnik je tisto, kar uporabnik vidi na svoji napravi, ko komunicira z vašim programom. Stanje pogleda je odvisno od podatkov, shranjenih z uporabo modela.

Kaj je krmilnik?

Krmilnik si lahko predstavljate kot most med komponentama Model in View.

Ko uporabnik posreduje podatke prek vašega uporabniškega vmesnika (pogled), pogled posreduje te podatke krmilniku. Upravljavec te podatke uporablja za posodobitev baze podatkov (prek modela). Krmilnik tudi potegne podatke iz baze podatkov (skozi model) in jih vrne v pogled.

Poleg tega, da je podatkovni kanal, je krmilnik tudi možgani operacije. Odloči, katero operacijo bo izvedel na katerih podatkih in katere podatke bo vrnil v uporabniški vmesnik.

Kako je vse skupaj?

Arhitektura MVC ustvarja polzaprto zanko, ki se opira na vse komponente za ustrezno delovanje. Naslednja ilustracija prikazuje, kako deluje arhitektura MVC.

Kot lahko vidite iz zgornje ilustracije, aplikacija MVC prejme začetni vnos podatkov od uporabnika prek uporabniškega vmesnika. Nato aplikacija te podatke posreduje skozi različne komponente arhitekture MVC in v nekaterih primerih manipulira s temi podatki v komponenti krmilnika.

Uporaba arhitekture MVC

Recimo, da razvijate aplikacijo za bencinsko črpalko, ki želi ustvariti evidenco vsega prodanega plina na črpalki in pomagati bencinarjem pri izračunu cene. Z uporabo arhitekture MVC bi začeli z modelom, nato prešli na krmilnik in potem, ko boste ugotovili vso logiko vaše aplikacije, lahko implementirate pogled.

Ko ustvarjate model za svojo aplikacijo, boste morali vedeti, katero vrsto podatkov želite shraniti, kako želite te podatke shraniti in kako dostopni želite, da so ti podatki.

Ustvarjanje modela aplikacije

//Knjižnica Java
uvoz java.io. Serializable;
javnostirazredu Model cene plina orodja Serializable{
//attributes
zasebnistatičnakončnodolgaserialVersionUID = 1 l;
zasebni String driverName;
zasebnilebdeti količina plina;
zasebni String gasType;
zasebnilebdeti stroški;
// privzeti konstruktor
javnosti GasPriceModel() {
to.driverName = "";
to.gasAmount = 0,00f;
to.gasType = "";
to.strošek = 0,00f;
}
// primarni konstruktorji
javnosti GasPriceModel (string driverName, lebdeti gasAmount, String gasType, lebdeti cena) {
to.driverName = ime voznika;
to.gasAmount = količina plina;
to.gasType = gasType;
to.strošek = strošek;
}
// pridobivalci in nastavljalniki, ki pridobivajo in manipulirajo s podatki
javnosti Niz getDriverName() {
vrnitev ime voznika;
}
javnostinična setDriverName (String driverName) {
to.driverName = ime voznika;
}
javnostilebdeti getGasAmount() {
vrnitev količina plina;
}
javnostinična setGasAmount(lebdeti Količina plina) {
to.gasAmount = količina plina;
}
javnosti Niz getGasType() {
vrnitev gasType;
}
javnostinična setGasType (String gasType) {
to.gasType = gasType;
}
javnostilebdeti getCost() {
vrnitev stroški;
}
javnostinična setCost(lebdeti cena) {
to.strošek = strošek;
}
}

V zgornji kodi modela je treba identificirati več pomembnih stvari. Prvi je, da implementira vmesnik Serializable. Ta vmesnik vam omogoča, da shranite stanje vsakega predmeta, ustvarjenega z uporabo Model cene plina razred tako, da ga pretvori v bajtni tok. Implementacija vmesnika Serializable pomeni, da morate ustvariti tudi ID različice, kar naredi prvi atribut v zgornjem razredu.

Povezano: Naučite se ustvariti razrede v Javi Ostali štirje atributi v Model cene plina razreda so enako pomembni, ker vam povedo, kdo bo dostopal do podatkov, ki jih bo ustvaril ta model. Prav tako vam pove, kakšne vrste podatkov bo model shranil (nizi in plavajoči).

Ustvarjanje krmilnika aplikacij

//Knjižnice Java
uvoz java.io. Mapa;
uvoz java.io. FileNotFoundException;
uvoz java.io. FileOutputStream;
uvoz java.io. IOException;
uvoz java.io. ObjectOutputStream;
javnostirazredu GasPriceController {
//izračuna strošek kupčevega plina in ga vrne
javnostilebdeti izračunaj stroške (lebdeti količina, String gasType){
lebdeti strošek = 0,00f;
končnolebdeti dizelCena = 4,925f;
končnolebdeti premiumPrice = 5,002f;
končnolebdeti redna cena = 4,680f;

če (gasType == "Diesel")
cena = znesek * cena dizelskega goriva;
če (gasType == "Premium")
strošek = znesek * premija Cena;
če (gasType == "Regular")
strošek = znesek * redna cena;

vrnitev stroški;
}

//shrani podatke iz vsake prodaje v datoteko z uporabo modela
javnostiboolean saveEntry (podatki GasPriceModel){
poskusi {

FileOutputStream fs = novo FileOutputStream(novo Datoteka("data.dat"), prav);
ObjectOutputStream os = novo ObjectOutputStream (fs);
os.writeObject (podatki);
os.flush();
os.close();
vrnitevprav;
} ujeti (FileNotFoundException e) {
e.printStackTrace();
} ujeti (IOException e) {
e.printStackTrace();
}
vrnitevnapačno;
}
}

Zgornji krmilnik naredi dve stvari, izvede izračun na podlagi podatkov, prejetih iz pogleda, in odloči, katere podatke bo vrniti. Zgornji krmilnik uporablja tudi model aplikacije za shranjevanje objektov, ustvarjenih iz vnosa pogleda, z uporabo shraniVnos() metoda.

Ustvarjanje pogleda aplikacije

//Knjižnice Java
uvoz java.awt. BorderLayout;
uvoz java.awt. GridLayout;
uvoz java.awt.event. ActionEvent;
uvoz java.awt.event. ActionListener;

uvoz javax.swing. JButton;
uvoz javax.swing. JComboBox;
uvoz javax.swing. JFrame;
uvoz javax.swing. JLabel;
uvoz javax.swing. JOptionPane;
uvoz javax.swing. JPanel;
uvoz javax.swing. JTextField;

javni razred GasPriceView razširja JFrame implementira ActionListener {

//attributes
zasebni statični končni dolgi serialVersionUID = 1L;
zasebni krmilnik GasPriceController;
zasebno ime gonilnika JLabel;
zasebno JTextField nameField;
zasebni JLabel gasAmount;
zasebno JTextField amountField;
zasebni JLabel gasType;
zasebni JComboBox typeCombo;
zasebni JButton btnClear;
zasebni JButton btnSave;
zasebni statični končni niz [] vrsta =
{"Diesel", "Premium", "Regular"};

// privzeti konstruktor
javni GasPriceView() {
to (novi GasPriceController());
}

// primarni konstruktor, ki povzroča uporabniški vmesnik
javni GasPriceView (krmilnik GasPriceController) {

super("Prijava za prodajo plina");
setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE);
setSize (400.500);
setVisible (true);

this.controller = krmilnik;

configureView();
}

//generiraj uporabniški vmesnik za aplikacijo
zasebni void configureView() {

setLayout (novo BorderLayout());
JPanel pnl = nov JPanel (nova GridLayout (4,2,2,2));

driverName = new JLabel("Ime voznika:");
pnl.add (ime gonilnika);
nameField = novo JTextField();
pnl.add (nameField);
gasAmount = nova JLabel("Količina plina (galona):");
pnl.add (količina plina);
količinaPolje = novo JTextField();
pnl.add (amountField);
gasType = new JLabel("Vrsta plina:");
pnl.add (gasType);
typeCombo = nov JComboBox(vrsta);
pnl.add (typeCombo);
btnClear = nov JButton("Počisti");
pnl.add (btnClear);
btnSave = nov JButton("Shrani");
pnl.add (btnSave );

dodaj (pnl, BorderLayout. CENTER);

ActionListener();

}
//posluša klik enega od dveh gumbov
public void ActionListener() {
btnClear.addActionListener (to);

btnSave.addActionListener (to);
}

//izvede dejanje, če kliknemo določen gumb
@Preglasi
public void actionPerformed (ActionEvent ev) {

if (ev.getSource().equals (btnClear)) {
nameField.setText("");
amountField.setText("");
}

če (ev.getSource().equals (btnSave)){

String gasType = (String) typeCombo.getSelectedItem();
float gasAmount = Float.parseFloat (amountField.getText());
float driverTotal = controller.calculateCost (količina plina, vrsta plina);
Niz ime gonilnika = nameField.getText();
JOptionPane.showMessageDialog (null, driverName +" bi moral plačati $" + driverTotal );

Odjemalec GasPriceModel = nov model GasPriceModel (ime gonilnika, količina plina, vrsta plina, voznik Total);

controller.saveEntry (stranka);
}

}
}

Zgornji pogled ustvari uporabniški vmesnik z uporabo configureView() metoda. Nato zbira podatke, ko pride do dogodka (prek poslušalca dejanj). Zgornji pogled nato pošlje zbrane podatke krmilniku, ki nato izvede nekaj izračunov in vrne podatke v pogled.

Izvajanje aplikacije MVC

uvoz java.awt. EventQueue;

javnostirazredu Aplikacija {

javnostistatičnanična main (String args[]) {
Čakalna vrsta dogodkov.invokeLater(
novo Runnable() {

@Preglasi
javnostinična teči () {
Krmilnik GasPriceController = novo Krmilnik cene plina();
novo GasPriceView (krmilnik);
}
});
}
}

Izvajanje App razred zgoraj bo ustvaril naslednji uporabniški vmesnik:

Zapolnitev uporabniškega vmesnika z ustreznimi podatki bo ustvarila naslednji pojavni uporabniški vmesnik:

Če pogledate levo od zgornje slike, boste videli, da je aplikacija ustvarila tudi novo datoteko z imenom "podatki.dat." Tako ta aplikacija MVC zbira podatke od uporabnika prek uporabniškega vmesnika (Pogled), ki te podatke pošlje Krmilnik. Krmilnik manipulira s podatki tako, da izvede nekaj izračunov, nato pa te podatke shrani v datoteko z uporabo modela. Povezano: Vnos in izhod Java: Vodnik za začetnike

Vnos in izhod Java: Vodnik za začetnike

Če natančno pogledate aplikacijo, ustvarjeno v tem članku, obstaja več očitnih prednosti. Nekatere od teh prednosti vključujejo:

  • Razširljivost
  • Lažje testiranje kode
  • Ustvarjanje bolj jedrnate kode

Toda arhitektura MVC ni edini uporaben vzorec oblikovanja, ki lahko izboljša vaš razvojni proces.

Kako ustvariti kodo za večkratno uporabo v JavaScriptu z uporabo vzorcev oblikovanja

Razumevanje uporabe vzorcev oblikovanja vam bo omogočilo uporabo kode za večkratno uporabo v JavaScriptu. Tukaj je tisto, kar morate vedeti.

Preberite Naprej

DelitiTweetE-naslov
Povezane teme
  • Programiranje
  • Programiranje
  • Java
O avtorju
Kadeisha Kean (44 objavljenih člankov)

Kadeisha Kean je razvijalka programske opreme s celotnim skladom in pisateljica tehničnega/tehnološkega področja. Ima izrazito sposobnost poenostavitve nekaterih najbolj zapletenih tehnoloških konceptov; izdelava materiala, ki ga lahko zlahka razume vsak novinec v tehnologiji. Navdušena je nad pisanjem, razvojem zanimive programske opreme in potovanjem po svetu (skozi dokumentarne filme).

Več od Kadeishe Kean

Naročite se na naše novice

Pridružite se našemu glasilu za tehnične nasvete, ocene, brezplačne e-knjige in ekskluzivne ponudbe!

Kliknite tukaj, da se naročite