Model-View-Controller (MVC) arhitektūra ir viens no populārākajiem programmatūras izstrādes modeļiem. MVC arhitektūras loģikā tiek izmantots problēmu nošķiršanas projektēšanas princips. Šī principa mērķis ir sadalīt pieteikumu rajona sadaļās, kur katrā sadaļā tiek risināts īpašs un atsevišķs jautājums.
MVC arhitektūra burtiski ievēro problēmu nošķiršanas principu. Faktiski katrs MVC akronīma burts ir būtiska jūsu pieteikuma sadaļa. Šajā rakstā ir detalizēti izpētīta katra MVC arhitektūras sadaļa un parādīts, kā tās izmantot programmatūras izstrādei.
Kas ir modelis?
MVC arhitektūras modelis ir galvenā dizaina modeļa sastāvdaļa. Tas ir tāpēc, ka jūsu lietojumprogrammas modelis saglabā datu loģiku. Modelis nosaka, kā jūs glabājat un izgūstat savus datus.
Lietojumprogrammai, kas izmanto MVC kontrollera arhitektūru, dati ir būtiska tās darbības sastāvdaļa.
Kas ir skats?
MVC arhitektūras skats ir jūsu lietojumprogrammas lietotāja interfeiss (UI). UI ir tas, ko lietotājs redz savā ierīcē, mijiedarbojoties ar jūsu programmu. Skata stāvoklis ir atkarīgs no datiem, kas saglabāti, izmantojot modeli.
Kas ir kontrolieris?
Jūs varat uzskatīt kontrolieri kā tiltu starp modeļa un skata komponentiem.
Kad lietotājs piegādā datus, izmantojot jūsu lietotāja interfeisu (skatu), skats nodod šos datus kontrolierim. Kontrolieris izmanto šos datus, lai atjauninātu datubāzi (izmantojot modeli). Kontrolieris arī izvelk datus no datu bāzes (izmantojot modeli) un atgriež tos skatā.
Papildus tam, ka kontrolieris ir datu kanāls, tas ir arī operācijas smadzenes. Tas izlemj, kādu darbību ar kuriem datiem veikt un kādus datus atgriezt lietotāja saskarnē.
Kā tas viss sanāk kopā?
MVC arhitektūra rada daļēji slēgtu cilpu, kas ir atkarīga no visu komponentu adekvātas darbības. Nākamajā attēlā parādīts, kā darbojas MVC arhitektūra.
Kā redzat iepriekš redzamajā attēlā, MVC lietojumprogramma saņem sākotnējo datu ievadi no lietotāja, izmantojot lietotāja interfeisu. Pēc tam lietojumprogramma nosūta šos datus caur dažādiem MVC arhitektūras komponentiem un dažos gadījumos manipulē ar šiem datiem Controller komponentā.
MVC arhitektūras pielietošana
Pieņemsim, ka izstrādājat lietojumprogrammu degvielas uzpildes stacijai, kas vēlas izveidot uzskaiti par visu stacijā pārdoto gāzi un palīdzēt gāzes dežurantiem aprēķināt cenu. Izmantojot MVC arhitektūru, jāsāk ar modeli, pēc tam pāriet uz kontrolieri un pēc tam, kad esat izdomājis visu lietojumprogrammas loģiku, varat ieviest skatu.
Veidojot modeli savai lietojumprogrammai, jums ir jāzina, kāda veida datus vēlaties saglabāt, kā vēlaties saglabāt šos datus un cik pieejamus vēlaties šos datus.
Lietojumprogrammas modeļa izveide
//Java bibliotēka
imports java.io. Serializējams;
publiskiklasē GasPriceModel īsteno Serializējams{
//attributes
PrivātsstatisksgalīgaisgaršserialVersionUID = 1L;
Privāts String driverName;
Privātspeldēt gāzes daudzums;
Privāts String gasType;
Privātspeldēt izmaksas;
// noklusējuma konstruktors
publiski GasPriceModel() {
šis.driverName = "";
šis.gasAmount = 0,00f;
šis.gasType = "";
šis.maksa = 0,00f;
}
//primārie konstruktori
publiski GasPriceModel (virknes draivera nosaukums, peldēt gasAmount, String gasType, peldēt izmaksas) {
šis.driverName = draiveraVārds;
šis.gasAmount = gasAmount;
šis.gasType = gasType;
šis.cost = izmaksas;
}
//ieguvēji un iestatītāji, kas izgūst un apstrādā datus
publiski String getDriverName() {
atgriezties vadītāja vārds;
}
publiskinederīgs setDriverName (virknes draivera nosaukums) {
šis.driverName = draiveraVārds;
}
publiskipeldēt getGasAmount() {
atgriezties gāzes daudzums;
}
publiskinederīgs setGasAmount(peldēt gasAmount) {
šis.gasAmount = gasAmount;
}
publiski String getGasType() {
atgriezties gasType;
}
publiskinederīgs setGasType (virkne gasType) {
šis.gasType = gasType;
}
publiskipeldēt getCost() {
atgriezties izmaksas;
}
publiskinederīgs setCost(peldēt izmaksas) {
šis.cost = izmaksas;
}
}
Iepriekš redzamajā modeļa kodā ir jānorāda vairākas svarīgas lietas. Pirmais ir tas, ka tas ievieš serializējamo saskarni. Šī saskarne ļauj saglabāt katra objekta stāvokli, kas izveidots, izmantojot GasPriceModel klasē, pārvēršot to baitu straumē. Serializējamās saskarnes ieviešana nozīmē, ka jums ir jāizveido arī versijas ID, ko veic pirmais atribūts iepriekš minētajā klasē.
Saistīts: Uzziniet, kā izveidot klases Java Pārējie četri atribūti GasPriceModel klase ir vienlīdz svarīgas, jo tās norāda, kas piekļūs datiem, ko šis modelis radīs. Tas arī norāda, kāda veida datus modelis saglabās (virknes un pludiņi).
Lietojumprogrammu kontrollera izveide
//Java bibliotēkas
imports java.io. Fails;
imports java.io. FileNotFoundException;
imports java.io. FileOutputStream;
imports java.io. IOIzņēmums;
imports java.io. ObjectOutputStream;
publiskiklasē GasPriceController {
//aprēķina klienta gāzes izmaksas un atdod
publiskipeldēt aprēķināt izmaksas(peldēt summa, virkne gasType){
peldēt izmaksas = 0,00f;
galīgaispeldēt dīzelisCena = 4,925f;
galīgaispeldēt premiumPrice = 5,002f;
galīgaispeldēt parastāCena = 4,680f;ja (gasType == "Dīzelis")
izmaksas = summa * dīzelisCena;
ja (gasType == "Premium")
izmaksas = summa * piemaksaCena;
ja (gasType == "parasts")
izmaksas = summa * parastāCena;atgriezties izmaksas;
}//saglabā datus no katras pārdošanas failā, izmantojot modeli
publiskiBūla saveEntry (GasPriceModel dati){
pamēģini {
FileOutputStream fs = jauns FileOutputStream(jauns Fails ("data.dat"), taisnība);
ObjectOutputStream os = jauns ObjectOutputStream (fs);
os.writeObject (dati);
os.flush();
os.close();
atgrieztiestaisnība;
} noķert (FileNotFoundException e) {
e.printStackTrace();
} noķert (IO izņēmums e) {
e.printStackTrace();
}
atgrieztiesviltus;
}
}
Iepriekš minētais kontrolieris veic divas darbības: veic no skata saņemto datu aprēķinu un izlemj, kādus datus atgriezt. Iepriekš minētais kontrolieris arī izmanto lietojumprogrammas modeli, lai saglabātu objektus, kas izveidoti no skata ievades, izmantojot saveEntry() metodi.
Lietojumprogrammas skata izveide
//Java bibliotēkas
importēt java.awt. BorderLayout;
importēt java.awt. GridLayout;
importēt java.awt.event. ActionEvent;
importēt java.awt.event. ActionListener;importēt javax.swing. JButton;
importēt javax.swing. JComboBox;
importēt javax.swing. JFrame;
importēt javax.swing. JLabel;
importēt javax.swing. JOptionPane;
importēt javax.swing. JPanel;
importēt javax.swing. JTextField;public class GasPriceView paplašina JFrame ievieš ActionListener {
//attributes
privātā statiskā galīgā garā serialVersionUID = 1L;
privātais GasPriceController kontrolieris;
privāts JLabel draivera vārds;
privāts Jteksta lauka nosaukumsLauks;
privātā JLabel gasAmount;
privāts JTextField summaLauks;
privāts JLabel gasType;
privāts JComboBoxTypeCombo;
privāts JButton btnClear;
privāts JButton btnSave;
privātā statiskā beigu virkne[] tips =
{"Dīzelis", "Premium", "Parastais"};//noklusējuma konstruktors
publisks GasPriceView() {
šis (jaunais GasPriceController());
}//galvenais konstruktors, kas izraisa lietotāja saskarni
publisks GasPriceView (GasPriceController kontrolieris) {super ("Gāzes pārdošanas lietojumprogramma");
setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE);
setSize (400 500);
setVisible (true);this.controller = kontrolieris;
configureView();
}//ģenerējiet lietojumprogrammas lietotāja saskarni
private void configureView() {setLayout (jauns BorderLayout());
JPanel pnl = jauns JPanel (jauns GridLayout (4,2,2,2));driverName = new JLabel("Vadītāja vārds:");
pnl.add (draivera nosaukums);
nameField = new JTextField();
pnl.add (nameField);
gasAmount = new JLabel("Gāzes daudzums (galons):");
pnl.add (gasAmount);
summaField = new JTextField();
pnl.add (summaField);
gasType = new JLabel("Gāzes veids:");
pnl.add (gasType);
typeCombo = jauns JComboBox(tips);
pnl.add (typeCombo);
btnClear = new JButton("Notīrīt");
pnl.add (btnClear);
btnSaglabāt = new JButton("Saglabāt");
pnl.add (btnSave );pievienot (pnl, BorderLayout. CENTRS);
ActionListener();
}
//klausās, vai tiek nospiesta viena no divām pogām
public void ActionListener() {
btnClear.addActionListener (tas);btnSave.addActionListener (šis);
}//veic darbību, ja tiek noklikšķināts uz noteiktas pogas
@Override
public void actionPerformed (ActionEvent ev) {if (ev.getSource().equals (btnClear)) {
nameField.setText("");
summaField.setText("");
}if (ev.getSource().equals (btnSave)){
String gasType = (virknes) typeCombo.getSelectedItem();
float gasAmount = Float.parseFloat (amountField.getText());
float driverTotal = controller.calculateCost (gasAmount, gasType);
String driverName = nameField.getText();
JOptionPane.showMessageDialog (null, driverName +" jāmaksā $" + driverTotal );GasPriceModel klients = jauns GasPriceModel (vadītāja nosaukums, gasAmount, gasType, driverTotal);
controller.saveEntry (klients);
}
}
}
Iepriekš redzamajā skatā tiek izveidots lietotāja interfeiss, izmantojot configureView() metodi. Pēc tam tas apkopo datus pēc notikuma (izmantojot darbību uztvērēju). Iepriekš redzamais skats nosūta savāktos datus kontrolierim, kas pēc tam veic dažus aprēķinus un atgriež datus skatā.
MVC lietojumprogrammas izpilde
imports java.awt. EventQueue;
publiskiklasē Lietotne {
publiskistatisksnederīgs galvenais (virkne args[]) {
EventQueue.izsauktVēlāk(
jauns Runnable() {
@Override
publiskinederīgs palaist() {
GasPriceController kontrolieris = jauns GasPriceController();
jauns GasPriceView (kontrolieris);
}
});
}
}
Izpildot App augstāk esošā klase ģenerēs šādu lietotāja interfeisu:
Aizpildot lietotāja saskarni ar attiecīgajiem datiem, tiks ģenerēts šāds uznirstošais lietotāja interfeiss:
Ja skatāties uz attēla kreiso pusi, redzēsit, ka lietojumprogramma ir izveidojusi arī jaunu failu ar nosaukumu "data.dat." Tātad šī MVC lietojumprogramma apkopo datus no lietotāja, izmantojot lietotāja saskarni (View), kas nosūta šos datus uz Kontrolieris. Kontrolieris manipulē ar datiem, veicot dažus aprēķinus, un pēc tam saglabā šos datus failā, izmantojot modeli. Saistīts: Java ievade un izvade: rokasgrāmata iesācējiem
Java ievade un izvade: rokasgrāmata iesācējiem
Ja rūpīgi aplūkojat šajā rakstā izveidoto lietojumprogrammu, ir vairākas acīmredzamas priekšrocības. Dažas no šīm priekšrocībām ietver:
- Mērogojamība
- Vienkāršāka koda pārbaude
- Īsāka koda izveide
Taču MVC arhitektūra nav vienīgais noderīgais dizaina modelis, kas var uzlabot jūsu izstrādes procesu.
Izpratne par to, kā izmantot dizaina modeļus, ļaus jums izmantot atkārtoti lietojamu kodu JavaScript. Lūk, kas jums jāzina.
Lasiet Tālāk
- Programmēšana
- Programmēšana
- Java
Kadeiša Kīna ir pilnas komplektācijas programmatūras izstrādātāja un tehnisko/tehnoloģiju rakstniece. Viņai ir izteikta spēja vienkāršot dažus no vissarežģītākajiem tehnoloģiskajiem jēdzieniem; ražo materiālu, ko var viegli saprast ikviens tehnoloģiju iesācējs. Viņa aizraujas ar rakstīšanu, interesantas programmatūras izstrādi un ceļošanu pa pasauli (izmantojot dokumentālās filmas).
Abonējiet mūsu biļetenu
Pievienojieties mūsu informatīvajam izdevumam, lai saņemtu tehniskos padomus, pārskatus, bezmaksas e-grāmatas un ekskluzīvus piedāvājumus!
Noklikšķiniet šeit, lai abonētu