Model-View-Controller (MVC) arhitektuur on üks populaarsemaid tarkvaraarendusmustreid. MVC arhitektuuri taga olev loogika kasutab probleemide eraldamise põhimõtet. Selle põhimõtte eesmärk on jagada taotlus ringkonnaosadeks, kus iga sektsioon käsitleb konkreetset ja eraldiseisvat probleemi.

MVC arhitektuur järgib probleemide eraldamise põhimõtet. Tegelikult tähistab iga täht MVC akronüümis teie rakenduse olulist osa. See artikkel uurib üksikasjalikult iga MVC arhitektuuri jaotist ja näitab, kuidas neid tarkvara arendamiseks kasutada.

Mis on mudel?

MVC arhitektuuri mudel on disainimustri põhikomponent. Seda seetõttu, et teie rakenduse mudel salvestab andmeloogika. Mudel määrab, kuidas andmeid salvestate ja hankite.

Rakenduse puhul, mis kasutab MVC kontrolleri arhitektuuri, on andmed selle töö oluline komponent.

Mis on vaade?

MVC arhitektuuri vaade on teie rakenduse kasutajaliides (UI). Kasutajaliides on see, mida kasutaja teie programmiga suhtlemisel oma seadmes näeb. Vaate olek sõltub mudeli abil salvestatud andmetest.

instagram viewer

Mis on kontroller?

Kontrollerit võib pidada sillaks mudeli ja vaate komponentide vahel.

Kui kasutaja edastab andmeid teie kasutajaliidese (vaate) kaudu, edastab vaade need andmed kontrollerile. Kontroller kasutab neid andmeid andmebaasi värskendamiseks (mudeli kaudu). Samuti tõmbab kontroller andmed andmebaasist (mudeli kaudu) ja tagastab need vaatesse.

Lisaks sellele, et kontroller on andmekanal, on see ka operatsiooni aju. See otsustab, millist toimingut milliste andmetega teha ja millised andmed kasutajaliidesesse tagastada.

Kuidas see kõik kokku saab?

MVC arhitektuur loob poolsuletud ahela, mis tugineb kõikidele komponentidele, et korralikult toimida. Järgmine illustratsioon näitab, kuidas MVC arhitektuur töötab.

Nagu ülaltoodud jooniselt näha, saab MVC rakendus kasutajaliidese kaudu esmase andmete sisendi. Seejärel edastab rakendus need andmed läbi MVC arhitektuuri erinevate komponentide ja mõnel juhul manipuleerib neid andmeid Controlleri komponendis.

MVC arhitektuuri rakendamine

Oletame, et töötate välja rakendust tankla jaoks, mis soovib luua kogu jaamas müüdava gaasi arvestust ja aidata gaasiteenindajaid hinna arvutamisel. MVC arhitektuuri kasutades alustage mudelist, liikuge seejärel kontrolleri juurde ja kui olete oma rakenduse kogu loogika välja mõelnud, saate vaate juurutada.

Rakenduse mudeli loomisel peate teadma, millist tüüpi andmeid soovite salvestada, kuidas soovite neid andmeid salvestada ja kui juurdepääsetavad need andmed soovite.

Rakendusmudeli loomine

//Java raamatukogu
importida java.io. Serialiseeritav;
avalikklass GasPriceModel rakendab Serialiseeritav{
//attributes
privaatnestaatilinelõplikpikkserialVersionUID = 1 l;
privaatne Stringi draiverinimi;
privaatneujuk gasAmount;
privaatne String gasType;
privaatneujuk maksumus;
// vaikekonstruktor
avalik GasPriceModel() {
see.driverName = "";
see.gasAmount = 0,00f;
see.gasType = "";
see.kulu = 0,00f;
}
//põhikonstruktorid
avalik GasPriceModel (stringi draiverinimi, ujuk gasAmount, string gasType, ujuk maksumus) {
see.driverName = draiveriNimi;
see.gasAmount = gasAmount;
see.gasType = gasType;
see.kulu = kulu;
}
//Getterid ja seadistajad, mis toovad ja töötlevad andmeid
avalik String getDriverName() {
tagasi juhinimi;
}
avaliktühine setDriverName (String driverName) {
see.driverName = draiveriNimi;
}
avalikujuk getGasAmount() {
tagasi gasAmount;
}
avaliktühine setGasAmount(ujuk gasAmount) {
see.gasAmount = gasAmount;
}
avalik String getGasType() {
tagasi gasType;
}
avaliktühine setGasType (string gasType) {
see.gasType = gasType;
}
avalikujuk getCost() {
tagasi maksumus;
}
avaliktühine setCost(ujuk maksumus) {
see.kulu = kulu;
}
}

Ülaltoodud mudelikoodis tuleb tuvastada mitu olulist asja. Esimene on see, et see rakendab serialiseeritavat liidest. See liides võimaldab salvestada iga rakenduse abil loodud objekti oleku GasPriceModel klass, teisendades selle baidivooks. Serialiseeritava liidese rakendamine tähendab, et peate looma ka versiooni ID, mida teeb ülaltoodud klassi esimene atribuut.

Seotud: Siit saate teada, kuidas Javas klasse luua Ülejäänud neli atribuuti GasPriceModel klass on võrdselt olulised, sest need ütlevad teile, kes pääseb juurde andmetele, mida see mudel loob. Samuti ütleb see teile, millist tüüpi andmeid mudel salvestab (stringid ja ujukid).

Rakenduse kontrolleri loomine

//Java raamatukogud
importida java.io. Fail;
importida java.io. FileNotFoundException;
importida java.io. FileOutputStream;
importida java.io. IOException;
importida java.io. ObjectOutputStream;
avalikklass GasPriceController {
//arvutab kliendi gaasi maksumuse ja tagastab selle
avalikujuk arvuta kulu(ujuk summa, string gasType){
ujuk maksumus = 0.00f;
lõplikujuk diiselHind = 4,925f;
lõplikujuk lisatasuHind = 5,002 f;
lõplikujuk tavahind = 4,680 f;

kui (gasType == "diisel")
kulu = summa * diiselHind;
kui (gasType == "Premium")
maksumus = summa * lisatasuHind;
kui (gasType == "Tavaline")
maksumus = summa * tavahind;

tagasi maksumus;
}

//salvestab iga müügi andmed mudelit kasutades faili
avaliktõeväärtus saveEntry (GasPriceModeli andmed){
proovige {

FileOutputStream fs = uus FileOutputStream(uus Fail ("data.dat"), tõsi);
ObjectOutputStream os = uus ObjectOutputStream (fs);
os.writeObject (andmed);
os.flush();
os.close();
tagasitõsi;
} püüda (FileNotFoundException e) {
e.printStackTrace();
} püüda (IOErand e) {
e.printStackTrace();
}
tagasivale;
}
}

Ülaltoodud kontroller teeb kahte asja: ta teostab vaatest saadud andmete põhjal arvutuse ja otsustab, millised andmed tagastada. Ülaltoodud kontroller kasutab rakenduse mudelit ka vaate sisendist loodud objektide salvestamiseks, kasutades saveEntry() meetod.

Rakendusvaate loomine

//Java raamatukogud
importida java.awt. BorderLayout;
importida java.awt. GridLayout;
importida java.awt.event. ActionEvent;
importida java.awt.event. ActionListener;

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

public class GasPriceView laiendab JFrame'i rakendamist ActionListener {

//attributes
privaatne staatiline lõplik pikk serialVersionUID = 1L;
privaatne GasPriceController kontroller;
privaatne JLabeli draiverinimi;
privaatne JTekstivälja nimiväli;
privaatne JLabel gasAmount;
privaatne JTextField summaField;
privaatne JLabel gasType;
privaatne JComboBox tüüpCombo;
privaatne JButton btnClear;
privaatne JButton btnSave;
privaatne staatiline lõplik String[] tüüp =
{"Diisel", "Premium", "Tavaline"};

//vaikekonstruktor
avalik GasPriceView() {
see (uus GasPriceController());
}

//peamine konstruktor, mis põhjustab kasutajaliidese
avalik GasPriceView (GasPriceControlleri kontroller) {

super("Gaasimüügi rakendus");
setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE);
setSize (400 500);
setVisible (tõene);

this.controller = kontroller;

configureView();
}

//loo rakenduse kasutajaliides
private void configureView() {

setLayout (uus BorderLayout());
JPanel pnl = uus JPanel (uus GridLayout (4,2,2,2));

driverName = new JLabel("Juhi nimi:");
pnl.add (draiveri nimi);
nameField = new JTextField();
pnl.add (nimiväli);
gasAmount = new JLabel("Gaasi kogus (gallon):");
pnl.add (gasAmount);
summaField = new JTextField();
pnl.add (summaField);
gasType = new JLabel("Gaasi tüüp:");
pnl.add (gasType);
typeCombo = uus JComboBox(tüüp);
pnl.add (typeCombo);
btnClear = new JButton("Tühjenda");
pnl.add (btnClear);
btnSave = new JButton("Salvesta");
pnl.add (btnSave );

add (pnl, BorderLayout. KESKUS);

ActionListener();

}
//kuulab ühe kahest nupust klõpsamist
public void ActionListener() {
btnClear.addActionListener (see);

btnSave.addActionListener (see);
}

//sooritab toimingu, kui klõpsata konkreetsel nupul
@Alista
public void actionPerformed (ActionEvent ev) {

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

if (ev.getSource().equals (btnSave)){

String gasType = (String) typeCombo.getSelectedItem();
float gasAmount = Float.parseFloat (amountField.getText());
float driverTotal = kontroller.calculateCost (gasAmount, gasType);
String draiverName = nimiField.getText();
JOptionPane.showMessageDialog (null, draiveriNimi +" peaks maksma $" + driverTotal );

GasPriceModel klient = uus GasPriceModel (juhiNimi, gasAmount, gasType, driverTotal);

controller.saveEntry (klient);
}

}
}

Ülaltoodud vaade loob kasutajaliidese, kasutades configureView() meetod. Seejärel kogub see pärast sündmuse toimumist andmeid (tegevusekuulaja kaudu). Ülaltoodud vaade saadab seejärel kogutud andmed kontrollerile, mis seejärel teostab mõned arvutused ja tagastab andmed vaatesse.

MVC rakenduse käivitamine

importida java.awt. EventQueue;

avalikklass Rakendus {

avalikstaatilinetühine main (String args[]) {
EventQueue.kutsuda hiljem(
uus Runnable() {

@Alista
avaliktühine run() {
GasPriceController kontroller = uus GasPriceController();
uus GasPriceView (kontroller);
}
});
}
}

Täites Rakendus ülaltoodud klass loob järgmise kasutajaliidese:

Kasutajaliidese täitmine asjakohaste andmetega loob järgmise hüpikakna kasutajaliidese:

Kui vaatate ülaltoodud pildi vasakpoolset külge, näete, et rakendus lõi ka uue faili nimega "data.dat." Seega kogub see MVC rakendus kasutajalt andmeid kasutajaliidese (View) kaudu, mis saadab need andmed Kontroller. Kontroller töötleb andmeid, tehes mõningaid arvutusi, seejärel salvestab need andmed mudelit kasutades faili. Seotud: Java sisend ja väljund: juhend algajatele

Java sisend ja väljund: juhend algajatele

Kui vaatate käesolevas artiklis loodud rakendust tähelepanelikult, on sellel mitmeid ilmseid eeliseid. Mõned neist eelistest on järgmised:

  • Skaleeritavus
  • Lihtsam koodi testimine
  • Ülevaatlikuma koodi loomine

Kuid MVC arhitektuur ei ole ainus kasulik disainimuster, mis võib teie arendusprotsessi täiustada.

Kuidas luua JavaScriptis korduvkasutatavat koodi kujundusmustrite abil

Disainimustrite kasutamise mõistmine võimaldab teil JavaScriptis kasutada korduvkasutatavat koodi. Siin on, mida pead teadma.

Loe edasi

JagaSäutsMeil
Seotud teemad
  • Programmeerimine
  • Programmeerimine
  • Java
Autori kohta
Kadeisha Kean (Avaldatud 44 artiklit)

Kadeisha Kean on täisstacki tarkvaraarendaja ja tehniline/tehnoloogiakirjutaja. Tal on selge võime lihtsustada mõningaid kõige keerukamaid tehnoloogilisi kontseptsioone; Tootma materjali, mis on kergesti mõistetav igale tehnoloogiaalgajale. Ta on kirglik kirjutamise, huvitava tarkvara arendamise ja maailmas reisimise vastu (dokumentaalfilmide kaudu).

Veel Kadeiha Keanilt

Liituge meie uudiskirjaga

Liituge meie uudiskirjaga tehniliste näpunäidete, arvustuste, tasuta e-raamatute ja eksklusiivsete pakkumiste saamiseks!

Tellimiseks klõpsake siin