Архитектурата Model-View-Controller (MVC) е един от най-популярните модели за разработка на софтуер. Логиката зад MVC архитектурата използва принципа на проектиране на разделяне на проблемите. Този принцип има за цел да раздели заявлението на областни секции, където всеки раздел разглежда специфичен и отделен въпрос.
MVC архитектурата следва до буква принципа на разделяне на притесненията. Всъщност всяка буква в акронима на MVC представлява съществен раздел от вашето приложение. Тази статия разглежда подробно всеки раздел от MVC архитектурата и ви показва как да ги използвате за разработване на софтуер.
Какво представлява моделът?
Моделът на MVC архитектурата е основен компонент на модела на проектиране. Това е така, защото моделът на вашето приложение съхранява логиката на данните. Моделът диктува как съхранявате и извличате данните си.
За приложение, което използва архитектурата на MVC контролера, данните са съществен компонент от неговата работа.
Какво представлява гледката?
Изгледът на MVC архитектурата е потребителският интерфейс (UI) на вашето приложение. Потребителският интерфейс е това, което потребителят вижда на устройството си, когато взаимодейства с вашата програма. Състоянието на изгледа разчита на данните, съхранявани с помощта на модела.
Какво представлява контролерът?
Можете да мислите за контролера като мост между компонентите Model и View.
Когато потребител предоставя данни през вашия потребителски интерфейс (изгледа), изгледът предава тези данни на контролера. Контролерът използва тези данни за актуализиране на базата данни (чрез модела). Контролерът също извлича данни от базата данни (чрез модела) и ги връща в изгледа.
Освен че е канал за данни, контролерът е и мозъкът на операцията. Той решава каква операция да извърши върху кои данни и какви данни да върне в потребителския интерфейс.
Как всичко се събира?
MVC архитектурата създава полузатворен цикъл, който разчита на всички компоненти да функционират адекватно. Следващата илюстрация показва как работи MVC архитектурата.
Както можете да видите от илюстрацията по-горе, приложението MVC получава първоначално въвеждане на данни от потребител през потребителския интерфейс. След това приложението предава тези данни през различните компоненти на MVC архитектурата и в някои случаи манипулира тези данни в компонента на контролера.
Прилагане на MVC архитектура
Да речем, че разработвате приложение за бензиностанция, която иска да създаде запис на целия газ, продаден на станцията, и да помогне на служителите на газта при изчисляването на цената. Използвайки MVC архитектура, ще започнете с модела, след това преминете към контролера и след като разберете цялата логика на приложението си, можете да приложите изгледа.
Когато създавате модел за вашето приложение, ще трябва да знаете какъв тип данни искате да съхранявате, как искате да съхранявате тези данни и колко достъпни искате да бъдат тези данни.
Създаване на модел на приложение
// Java библиотека
внос java.io. Сериализиран;
общественоклас Gas PriceModel приспособления Може да се сериализира{
//attributes
частенстатиченфиналдългоserialVersionUID = 1L;
частен Низ име на драйвер;
частенплува gasAmount;
частен String gasType;
частенплува цена;
// конструктор по подразбиране
обществено GasPriceModel() {
това.driverName = "";
това.gasAmount = 0.00f;
това.gasType = "";
това.cost = 0,00f;
}
// първични конструктори
обществено GasPriceModel (Име на драйвер низ, плува gasAmount, String gasType, плува цена) {
това.driverName = DriveName;
това.gasAmount = количество газ;
това.gasType = тип газ;
това.cost = цена;
}
//получатели и сетери, които извличат и манипулират данни
обществено Низ getDriverName() {
връщане име на водача;
}
общественонищожен setDriverName (String driverName) {
това.driverName = DriveName;
}
общественоплува getGasAmount() {
връщане gasAmount;
}
общественонищожен setGasAmount(плува количество газ) {
това.gasAmount = количество газ;
}
обществено Низ getGasType() {
връщане газТип;
}
общественонищожен setGasType (String gasType) {
това.gasType = тип газ;
}
общественоплува getCost() {
връщане цена;
}
общественонищожен setCost(плува цена) {
това.cost = цена;
}
}
Има няколко важни неща, които трябва да се идентифицират в кода на модела по-горе. Първата е, че внедрява Serializable интерфейс. Този интерфейс ви позволява да запазите състоянието на всеки обект, създаден с помощта на Gas PriceModel клас, като го преобразува в байтов поток. Внедряването на Serializable интерфейса означава, че вие също трябва да създадете идентификатор на версията, което прави първият атрибут в класа по-горе.
Свързани: Научете как да създавате класове в Java Останалите четири атрибута в Gas PriceModel class са еднакво важни, защото ви казват кой ще има достъп до данните, които този модел ще създаде. Той също така ви казва какъв тип данни ще съхранява моделът (низове и плаващи числа).
Създаване на контролера на приложения
// Библиотеки на Java
внос java.io. Файл;
внос java.io. FileNotFoundException;
внос java.io. FileOutputStream;
внос java.io. IOException;
внос java.io. ObjectOutputStream;
общественоклас GasPriceController {
// калкулира цената на газа на клиента и го връща
общественоплува изчисляване на цена(плува количество, String gasType){
плува цена = 0.00f;
финалплува дизел Цена = 4.925f;
финалплува premiumPrice = 5,002f;
финалплува редовна цена = 4,680f;ако (Тип газ == "Дизел")
цена = сума * цена на дизел;
ако (gasType == "Премиум")
цена = сума * премияЦена;
ако (gasType == "Обикновено")
цена = сума * редовна цена;връщане цена;
}//записва данните от всяка продажба във файл с помощта на модела
общественобулев saveEntry (данни GasPriceModel){
опитвам {
FileOutputStream fs = нов FileOutputStream(нов Файл("data.dat"), вярно);
ObjectOutputStream os = нов ObjectOutputStream (fs);
os.writeObject (данни);
os.flush();
os.close();
връщаневярно;
} улов (FileNotFoundException e) {
e.printStackTrace();
} улов (IOException e) {
e.printStackTrace();
}
връщанефалшиво;
}
}
Контролерът по-горе прави две неща, той извършва изчисление на данните, получени от изгледа, и решава какви данни да върне. Контролерът по-горе също използва модела на приложението, за да съхранява обектите, създадени от входния изглед, като използва saveEntry() метод.
Създаване на изглед на приложението
// Java библиотеки
импортирайте java.awt. BorderLayout;
импортирайте java.awt. GridLayout;
импортирайте java.awt.event. ActionEvent;
импортирайте java.awt.event. ActionListener;импортирайте javax.swing. JButton;
импортирайте javax.swing. JComboBox;
импортирайте javax.swing. JFrame;
импортирайте javax.swing. JLabel;
импортирайте javax.swing. JOptionPane;
импортирайте javax.swing. JPanel;
импортирайте javax.swing. JTextField;публичен клас GasPriceView разширява JFrame прилага ActionListener {
//attributes
частен статичен окончателен дълъг serialVersionUID = 1L;
частен контролер GasPriceController;
private JLabel driverName;
частно JTextField nameField;
частен JLabel gasAmount;
частно JTextField amountField;
частен JLabel gasType;
частен JComboBoxtypeCombo;
частен JButton btnClear;
частен JButton btnSave;
частен статичен окончателен String[] тип =
{"Дизел", "Премиум", "Регулярен"};// конструктор по подразбиране
публичен GasPriceView() {
това (нов GasPriceController());
}// първичен конструктор, който причинява потребителския интерфейс
публичен GasPriceView (контролер на GasPriceController) {super("Заявление за продажба на газ");
setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE);
setSize (400 500);
setVisible (true);this.controller = контролер;
configureView();
}// генериране на потребителския интерфейс за приложението
private void configureView() {setLayout (нов BorderLayout());
JPanel pnl = нов JPanel (нов GridLayout (4,2,2,2));driverName = new JLabel("Име на водача:");
pnl.add (driverName);
nameField = ново JTextField();
pnl.add (nameField);
gasAmount = new JLabel("Количество газ (галон):");
pnl.add (gasAmount);
количествоПоле = ново JTextField();
pnl.add (amountField);
gasType = нов JLabel("Тип газ:");
pnl.add (gasType);
typeCombo = нов JComboBox(Тип);
pnl.add (typeCombo);
btnClear = нов JButton("Изчистване");
pnl.add (btnClear);
btnSave = нов JButton("Запазване");
pnl.add (btnSave );добавете (pnl, BorderLayout. ЦЕНТЪР);
ActionListener();
}
//слуша щракването на един от двата бутона
public void ActionListener() {
btnClear.addActionListener (това);btnSave.addActionListener (това);
}//извършва действие, ако се щракне върху конкретен бутон
@Override
public void actionPerformed (ActionEvent ev) {if (ev.getSource().equals (btnClear)) {
nameField.setText("");
amountField.setText("");
}if (ev.getSource().equals (btnSave)){
String gasType = (String) typeCombo.getSelectedItem();
float gasAmount = Float.parseFloat (amountField.getText());
float driverTotal = controller.calculateCost (gasAmount, gasType);
Низ име на драйвер = nameField.getText();
JOptionPane.showMessageDialog (null, driverName +" трябва да плати $" + driverTotal );Клиент на GasPriceModel = нов GasPriceModel (име на водача, количество на газа, тип газ, общо на драйвера);
controller.saveEntry (клиент);
}
}
}
Изгледът по-горе създава потребителски интерфейс с помощта на configureView() метод. След това събира данни след настъпване на събитие (чрез слушател на действие). След това изгледът по-горе изпраща събраните данни до контролера, който след това извършва някои изчисления и връща данни към изгледа.
Изпълнение на приложението MVC
внос java.awt. EventQueue;
общественоклас приложение {
общественостатиченнищожен main (String args[]) {
EventQueue.invokeLater(
нов Runnable() {
@Override
общественонищожен run() {
Контролер GasPriceController = нов GasPriceController();
нов GasPriceView (контролер);
}
});
}
}
Изпълнение на ап класът по-горе ще генерира следния потребителски интерфейс:
Попълването на потребителския интерфейс със съответните данни ще генерира следния изскачащ потребителски интерфейс:
Ако погледнете отляво на изображението по-горе, ще видите, че приложението също е създало нов файл, наречен „data.dat.“ И така, това MVC приложение събира данни от потребител чрез потребителски интерфейс (View), който изпраща тези данни до Контролер. Контролерът манипулира данните, като извършва някои изчисления, след което съхранява тези данни във файл, използвайки модела. Свързани: Вход и изход на Java: Ръководство за начинаещи
Вход и изход на Java: Ръководство за начинаещи
Ако погледнете отблизо приложението, създадено в тази статия, има няколко очевидни предимства. Някои от тези предимства включват:
- Мащабируемост
- По-лесно тестване на код
- Създаването на по-сбит код
Но MVC архитектурата не е единственият полезен модел на проектиране, който може да подобри вашия процес на разработка.
Разбирането как да използвате шаблони за проектиране ще ви позволи да използвате код за многократна употреба в JavaScript. Ето какво трябва да знаете.
Прочетете Следващото
- Програмиране
- Програмиране
- Java
Kadeisha Kean е разработчик на софтуер с пълен стек и писател по технически/технологии. Тя има отчетливата способност да опростява някои от най-сложните технологични концепции; производство на материал, който може лесно да бъде разбран от всеки начинаещ в технологиите. Тя е страстна да пише, разработва интересен софтуер и да пътува по света (чрез документални филми).
Абонирайте се за нашия бюлетин
Присъединете се към нашия бюлетин за технически съвети, ревюта, безплатни електронни книги и ексклузивни оферти!
Щракнете тук, за да се абонирате