Model-View-Controller (MVC) architektūra yra vienas populiariausių programinės įrangos kūrimo modelių. MVC architektūros logika naudoja projektavimo principą atskirti rūpesčius. Šiuo principu siekiama suskirstyti paraišką į rajonų skyrius, kur kiekvienas skyrius sprendžia konkrečią ir atskirą problemą.

MVC architektūra visiškai atitinka problemų atskyrimo principą. Tiesą sakant, kiekviena MVC akronimo raidė yra esminė jūsų programos dalis. Šiame straipsnyje išsamiai nagrinėjama kiekviena MVC architektūros dalis ir parodyta, kaip jas naudoti kuriant programinę įrangą.

Kas yra Modelis?

MVC architektūros modelis yra pagrindinis dizaino modelio komponentas. Taip yra todėl, kad jūsų programos modelis saugo duomenų logiką. Modelis diktuoja, kaip saugote ir nuskaitote duomenis.

Programai, kuri naudoja MVC valdiklio architektūrą, duomenys yra esminis jos veikimo komponentas.

Kas yra Vaizdas?

MVC architektūros rodinys yra jūsų programos vartotojo sąsaja (UI). NS yra tai, ką naudotojas mato savo įrenginyje, kai sąveikauja su jūsų programa. Rodinio būsena priklauso nuo duomenų, saugomų naudojant modelį.

instagram viewer

Kas yra Valdiklis?

Galite galvoti apie valdiklį kaip tiltą tarp modelio ir vaizdo komponentų.

Kai vartotojas pateikia duomenis per jūsų vartotojo sąsają (Rodinys), rodinys perduoda tuos duomenis Valdikliui. Valdytojas naudoja tuos duomenis duomenų bazei atnaujinti (per modelį). Valdiklis taip pat ištraukia duomenis iš duomenų bazės (per modelį) ir grąžina juos į rodinį.

Valdiklis yra ne tik duomenų kanalas, bet ir operacijos smegenys. Ji nusprendžia, kokią operaciją atlikti su kokiais duomenimis ir kokius duomenis grąžinti į vartotojo sąsają.

Kaip visa tai susijungia?

MVC architektūra sukuria pusiau uždarą kilpą, kuri priklauso nuo visų komponentų, kad tinkamai veiktų. Šioje iliustracijoje parodyta, kaip veikia MVC architektūra.

Kaip matote iš aukščiau esančios iliustracijos, MVC programa gauna pradinį duomenų įvestį iš vartotojo per vartotojo sąsają. Tada programa perduoda tuos duomenis per skirtingus MVC architektūros komponentus ir kai kuriais atvejais manipuliuoja tais duomenimis valdiklio komponente.

MVC architektūros taikymas

Tarkime, kad kuriate programą degalinei, kuri nori sukurti visų stotyje parduotų dujų įrašą ir padėti dujų prižiūrėtojams apskaičiuoti kainą. Naudodami MVC architektūrą, pradėsite nuo modelio, tada pereikite prie valdiklio ir išsiaiškinę visą programos logiką galėsite įdiegti rodinį.

Kurdami savo programos modelį, turėsite žinoti, kokio tipo duomenis norite saugoti, kaip norite saugoti tuos duomenis ir kaip norite, kad tie duomenys būtų pasiekiami.

Taikymo modelio kūrimas

//Java biblioteka
importuoti java.io. Serializuojama;
viešasklasė „GasPriceModel“. padargai Serializuojama{
//attributes
privatusstatinisgalutinisilgasserialVersionUID = 1L;
privatus String driverName;
privatusplūdė dujų kiekis;
privatus String gasType;
privatusplūdė savikaina;
// numatytasis konstruktorius
viešas GasPriceModel() {
tai.driverName = "";
tai.gasAmount = 0,00f;
tai.gasType = "";
tai.cost = 0,00f;
}
//pirminiai konstruktoriai
viešas GasPriceModel (eilutės vairuotojo pavadinimas, plūdė gasAmount, eilutės gasType, plūdė kaina) {
tai.driverName = vairuotojo vardas;
tai.gasAmount = gasAmount;
tai.gasType = gasType;
tai.cost = kaina;
}
//Geteriai ir nustatytojai, kurie nuskaito ir apdoroja duomenis
viešas Eilutė getDriverName() {
grąžinti vairuotojo vardas;
}
viešastuštuma setDriverName (String driverName) {
tai.driverName = vairuotojo vardas;
}
viešasplūdė getGasAmount() {
grąžinti dujų kiekis;
}
viešastuštuma setGasAmount(plūdė gasAmount) {
tai.gasAmount = gasAmount;
}
viešas Eilutė getGasType() {
grąžinti gasType;
}
viešastuštuma setGasType (eilutė gasType) {
tai.gasType = gasType;
}
viešasplūdė getCost() {
grąžinti savikaina;
}
viešastuštuma setCost(plūdė kaina) {
tai.cost = kaina;
}
}

Aukščiau pateiktame modelio kode reikia nustatyti kelis svarbius dalykus. Pirmasis yra tai, kad ji įgyvendina Serializable sąsają. Ši sąsaja leidžia išsaugoti kiekvieno objekto, sukurto naudojant „GasPriceModel“. klasę konvertuodami į baitų srautą. Serializable sąsajos įdiegimas reiškia, kad taip pat turite sukurti versijos ID, kurį atlieka pirmasis aukščiau pateiktos klasės atributas.

Susijęs: Sužinokite, kaip kurti klases Java Kiti keturi atributai „GasPriceModel“. klasė yra vienodai svarbios, nes jos nurodo, kas turės prieigą prie duomenų, kuriuos sukurs šis modelis. Taip pat nurodoma, kokio tipo duomenis modelis saugos (eilutės ir plūdės).

Programų valdiklio kūrimas

//Java bibliotekos
importuoti java.io. Failas;
importuoti java.io. FileNotFoundException;
importuoti java.io. FileOutputStream;
importuoti java.io. IOException;
importuoti java.io. ObjectOutputStream;
viešasklasė GasPriceController {
//apskaičiuoja kliento dujų kainą ir jas grąžina
viešasplūdė apskaičiuotiKaina (plūdė suma, eilutė gasType){
plūdė kaina = 0,00f;
galutinisplūdė dyzelinasKaina = 4,925f;
galutinisplūdė priemokaKaina = 5,002f;
galutinisplūdė įprastinėKaina = 4,680f;

jeigu (gasType == "dyzelinas")
savikaina = suma * dyzelinasKaina;
jeigu (gasType == "Premium")
kaina = suma * priemokaKaina;
jeigu (gasType == "Įprastas")
kaina = suma * įprastaKaina;

grąžinti savikaina;
}

//išsaugo kiekvieno pardavimo duomenis į failą naudojant modelį
viešasloginis saveEntry (GasPriceModel duomenys){
bandyti {

FileOutputStream fs = naujas FileOutputStream(naujas Failas ("data.dat"), tiesa);
ObjectOutputStream os = naujas ObjectOutputStream (fs);
os.writeObject (duomenys);
os.flush();
os.close();
grąžintitiesa;
} sugauti (FileNotFoundException e) {
e.printStackTrace();
} sugauti (IO išimtis e) {
e.printStackTrace();
}
grąžintiklaidinga;
}
}

Aukščiau pateiktas Valdiklis atlieka du dalykus: apskaičiuoja duomenis, gautus iš rodinio, ir nusprendžia, kokius duomenis grąžinti. Aukščiau pateiktas valdiklis taip pat naudoja programos modelį, kad saugotų objektus, sukurtus iš rodinio įvesties, naudojant saveEntry() metodas.

Programos rodinio kūrimas

//Java bibliotekos
importuoti java.awt. BorderLayout;
importuoti java.awt. GridLayout;
importuoti java.awt.event. ActionEvent;
importuoti java.awt.event. ActionListener;

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

public class GasPriceView išplečia JFrame įgyvendina ActionListener {

//attributes
privatus statinis galutinis long serialVersionUID = 1L;
privatus GasPriceController valdiklis;
privatus JLabel vairuotojo vardas;
privatus JTextField pavadinimasLaukas;
privatus JLabel gasAmount;
privatus JTextField sumaLaukas;
privatus JLabel gasType;
privatus JComboBox tipasCombo;
privatus JButton btnClear;
privatus JButton btnSave;
privatus statinis galutinis String[] tipas =
{"Dyzelinas", "Premium", "Reguliarus"};

//numatytasis konstruktorius
public GasPriceView() {
tai (naujas GasPriceController());
}

//pagrindinis konstruktorius, sukeliantis vartotojo sąsają
viešas „GasPriceView“ („GasPriceController“ valdiklis) {

super („Dujų pardavimo programa“);
setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE);
setSize (400 500);
setVisible (true);

this.controller = valdiklis;

configureView();
}

//sugeneruoti programos vartotojo sąsają
private void configureView() {

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

driverName = new JLabel("Vairuotojo vardas:");
pnl.add (tvarkyklės pavadinimas);
nameField = new JTextField();
pnl.add (pavadinimo laukas);
gasAmount = new JLabel("Dujų kiekis (galonas):");
pnl.add (gasAmount);
sumaLaukas = new JTextField();
pnl.add (amountField);
gasType = new JLabel("Dujų tipas:");
pnl.add (gasType);
typeCombo = naujas JComboBox(tipas);
pnl.add (typeCombo);
btnClear = new JButton("Išvalyti");
pnl.add (btnClear);
btnSave = new JButton("Išsaugoti");
pnl.add (btnSave );

pridėti (pnl, BorderLayout. CENTRAS);

ActionListener();

}
//klauso vieno iš dviejų mygtukų paspaudimo
public void ActionListener() {
btnClear.addActionListener (tai);

btnSave.addActionListener (tai);
}

//atlieka veiksmą, jei paspaudžiamas konkretus mygtukas
@Nepaisyti
public void actionPerformed (ActionEvent ev) {

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

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

String gasType = (Eilutė) tipasCombo.getSelectedItem();
float gasAmount = Float.parseFloat (amountField.getText());
float driverTotal = controller.calculateCost (gasAmount, gasType);
String driverName = nameField.getText();
JOptionPane.showMessageDialog (null, driverName +" turėtų mokėti $" + driverTotal );

GasPriceModel klientas = naujas GasPriceModel (vairuotojo pavadinimas, gasAmount, gasType, driverTotal);

controller.saveEntry (klientas);
}

}
}

Aukščiau pateiktame rodinyje sukuriama vartotojo sąsaja naudojant configureView() metodas. Tada jis renka duomenis įvykus įvykiui (per veiksmo klausytoją). Aukščiau pateiktas rodinys siunčia surinktus duomenis Valdikliui, kuris atlieka kai kuriuos skaičiavimus ir grąžina duomenis į rodinį.

MVC programos vykdymas

importuoti java.awt. EventQueue;

viešasklasė App {

viešasstatinistuštuma pagrindinis (String args[]) {
Įvykių eilė.iškviesti Vėliau(
naujas Vykdomas () {

@Nepaisyti
viešastuštuma paleisti () {
GasPriceController valdiklis = naujas GasPriceController();
naujas GasPriceView (valdiklis);
}
});
}
}

Vykdydamas Programėlė aukščiau esanti klasė sugeneruos šią vartotojo sąsają:

Užpildžius vartotojo sąsają atitinkamais duomenimis, bus sukurta tokia iššokanti vartotojo sąsaja:

Jei pažvelgsite į aukščiau esančio paveikslėlio kairę pusę, pamatysite, kad programa taip pat sukūrė naują failą pavadinimu „duomenys.dat“. Taigi ši MVC programa renka duomenis iš vartotojo per vartotojo sąsają (View), kuri siunčia tuos duomenis į Valdiklis. Valdiklis manipuliuoja duomenimis atlikdamas kai kuriuos skaičiavimus, tada išsaugo tuos duomenis faile naudodamas modelį. Susijęs: „Java“ įvestis ir išvestis: vadovas pradedančiajam

„Java“ įvestis ir išvestis: vadovas pradedančiajam

Jei atidžiai pažvelgsite į šiame straipsnyje sukurtą programą, ji turi keletą akivaizdžių pranašumų. Kai kurie iš šių privalumų:

  • Mastelio keitimas
  • Lengvesnis kodo testavimas
  • Sukurti glaustesnį kodą

Tačiau MVC architektūra nėra vienintelis naudingas dizaino modelis, galintis pagerinti jūsų kūrimo procesą.

Kaip sukurti daugkartinį kodą „JavaScript“ naudojant dizaino šablonus

Suprasdami, kaip naudoti dizaino šablonus, galėsite naudoti daugkartinį kodą „JavaScript“. Štai ką reikia žinoti.

Skaitykite toliau

DalintisTviteryjeEl. paštas
Susijusios temos
  • Programavimas
  • Programavimas
  • Java
Apie autorių
Kadeisha Kean (Paskelbta 44 straipsniai)

Kadeisha Kean yra visos programinės įrangos kūrėja ir techninių / technologijų rašytoja. Ji turi išskirtinį gebėjimą supaprastinti kai kurias sudėtingiausias technologines koncepcijas; gaminant medžiagą, kurią gali lengvai suprasti bet kuris technologijų naujokas. Ji aistringai rašo, kuria įdomią programinę įrangą ir keliauja po pasaulį (per dokumentinius filmus).

Daugiau iš Kadeisha Kean

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. knygų ir išskirtinių pasiūlymų!

Norėdami užsiprenumeruoti, spustelėkite čia