Архитектура Model-View-Controller (MVC) — один из самых популярных шаблонов разработки программного обеспечения. Логика архитектуры MVC использует принцип разделения задач. Этот принцип направлен на разделение заявления на районные разделы, где каждый раздел касается конкретного и отдельного вопроса.

Архитектура MVC буквально следует принципу разделения задач. На самом деле каждая буква в аббревиатуре MVC представляет собой важный раздел вашего приложения. В этой статье подробно рассматривается каждый раздел архитектуры MVC и показано, как использовать их для разработки программного обеспечения.

Что такое модель?

Модель архитектуры MVC является основным компонентом шаблона проектирования. Это связано с тем, что модель вашего приложения хранит логику данных. Модель диктует, как вы храните и извлекаете свои данные.

Для приложения, использующего архитектуру контроллера MVC, данные являются важным компонентом его работы.

Что такое вид?

Представление архитектуры MVC — это пользовательский интерфейс (UI) вашего приложения. Пользовательский интерфейс — это то, что пользователь видит на своем устройстве, когда взаимодействует с вашей программой. Состояние представления зависит от данных, хранящихся в модели.

instagram viewer

Что такое контроллер?

Вы можете думать о контроллере как о мосте между компонентами модели и представления.

Когда пользователь предоставляет данные через ваш пользовательский интерфейс (представление), представление передает эти данные контроллеру. Контроллер использует эти данные для обновления базы данных (через Модель). Контроллер также извлекает данные из базы данных (через модель) и возвращает их в представление.

Контроллер является не только каналом данных, но и мозгом операции. Он решает, какую операцию выполнять с какими данными и какие данные возвращать в пользовательский интерфейс.

Как все это сочетается?

Архитектура MVC создает полузамкнутый цикл, в котором все компоненты должны функционировать должным образом. На следующем рисунке показано, как работает архитектура MVC.

Как видно из иллюстрации выше, приложение MVC получает первоначальный ввод данных от пользователя через пользовательский интерфейс. Затем приложение передает эти данные через различные компоненты архитектуры MVC и в некоторых случаях манипулирует этими данными в компоненте Controller.

Применение архитектуры MVC

Допустим, вы разрабатываете приложение для заправочной станции, которое хочет вести учет всего газа, проданного на заправке, и помогать газовщикам в расчете цены. Используя архитектуру MVC, вы начнете с модели, затем перейдете к контроллеру, и после того, как вы разберетесь со всей логикой своего приложения, вы сможете реализовать представление.

При создании модели для вашего приложения вам необходимо знать, какой тип данных вы хотите хранить, как вы хотите хранить эти данные и насколько доступными должны быть эти данные.

Создание модели приложения

// Java-библиотека
Импортировать java.io. сериализуемый;
публичныйкласс ГазЦенаМодель реализует Сериализуемый {
//attributes
частныйстатическийокончательныйдлиннаяserialVersionUID = 1л;
частный Строка имя_драйвера;
частныйплавать количество газа;
частный Струнный газовый тип;
частныйплавать Стоимость;
// конструктор по умолчанию
публичный МодельГазЦены() {
это.имя_драйвера = "";
это.gasAmount = 0.00f;
это.gasType = "";
это.стоимость = 0,00f;
}
// первичные конструкторы
публичный GasPriceModel (String имя_водителя, плавать gasAmount, Строка gasType, плавать Стоимость) {
это.имя_драйвера = имя_драйвера;
это.gasAmount = количество газа;
это.gasType = тип газа;
это.стоимость = стоимость;
}
// геттеры и сеттеры, которые извлекают данные и манипулируют ими
публичный Строка getDriverName () {
возвращение имя_водителя;
}
публичныйпустота setDriverName (String имя_водителя) {
это.имя_драйвера = имя_драйвера;
}
публичныйплавать получить количество газа () {
возвращение количество газа;
}
публичныйпустота установитьколичествогаза(плавать количество газа) {
это.gasAmount = количество газа;
}
публичный Строка getGasType() {
возвращение тип газа;
}
публичныйпустота setGasType (строка gasType) {
это.gasType = тип газа;
}
публичныйплавать получить стоимость () {
возвращение Стоимость;
}
публичныйпустота установитьСтоимость(плавать Стоимость) {
это.стоимость = стоимость;
}
}

В приведенном выше коде модели необходимо указать несколько важных моментов. Во-первых, он реализует интерфейс Serializable. Этот интерфейс позволяет сохранять состояние каждого объекта, созданного с помощью ГазЦенаМодель класс, преобразовав его в поток байтов. Реализация интерфейса Serializable означает, что вам также необходимо создать идентификатор версии, что и делает первый атрибут в приведенном выше классе.

Связанный: Узнайте, как создавать классы в Java Остальные четыре атрибута в ГазЦенаМодель class одинаково важны, потому что они сообщают вам, кто получит доступ к данным, которые создаст эта модель. Он также сообщает вам, какой тип данных будет хранить модель (строки и числа с плавающей запятой).

Создание контроллера приложений

//Java-библиотеки
Импортировать java.io. Файл;
Импортировать java.io. ФайлНеНайденИсключение;
Импортировать java.io. ФайлВыходнойПоток;
Импортировать java.io. IOException;
Импортировать java.io. ОбъектВыходнойПоток;
публичныйкласс Контроллер цен на газ {
//вычисляет стоимость газа клиента и возвращает ее
публичныйплавать рассчитатьСтоимость(плавать количество, строка gasType){
плавать стоимость = 0,00f;
окончательныйплавать дизельЦена = 4,925f;
окончательныйплавать премиальная цена = 5,002f;
окончательныйплавать обычная цена = 4,680f;

если (gasType == "Дизель")
стоимость = количество * дизельЦена;
если (gasType == "Премиум")
стоимость = сумма * премияЦена;
если (gasType == "Обычный")
стоимость = сумма * обычная цена;

возвращение Стоимость;
}

//сохраняет данные от каждой продажи в файл по модели
публичныйлогический saveEntry (данные GasPriceModel){
пытаться {

FileOutputStream fs = новый ФайлВыходнойПоток(новый Файл("data.dat"), истинный);
ObjectOutputStream ос = новый ObjectOutputStream (фс);
os.writeObject (данные);
ОС.flush();
ос.закрыть();
возвращениеистинный;
} поймать (FileNotFoundException e) {
e.printStackTrace();
} поймать (IOException e) {
e.printStackTrace();
}
возвращениеложный;
}
}

Контроллер выше делает две вещи: он выполняет расчет данных, полученных из представления, и решает, какие данные возвращать. Вышеприведенный контроллер также использует модель приложения для хранения объектов, созданных на основе входных данных представления, с помощью сохранить запись () метод.

Создание представления приложения

//Java-библиотеки
импортировать java.awt. ГраницаМакет;
импортировать java.awt. Макет сетки;
импортировать java.awt.event. событие действия;
импортировать java.awt.event. Прослушиватель действий;

импортировать javax.swing. JКнопка;
импортировать javax.swing. JComboBox;
импортировать javax.swing. JFrame;
импортировать javax.swing. JLabel;
импортировать javax.swing. JOptionPane;
импортировать javax.swing. JPanel;
импортировать javax.swing. Jтекстовое поле;

открытый класс GasPriceView расширяет JFrame, реализует ActionListener {

//attributes
private static final long serialVersionUID = 1L;
частный контроллер GasPriceController;
частное имя_драйвера JLabel;
частный JTextField nameField;
частный JLabel gasAmount;
частный JTextField суммаПоле;
частный JLabel gasType;
частный JComboBox типКомбо;
приватная кнопка JButton btnClear;
приватная кнопка JButton btnSave;
частная статическая конечная строка [] тип =
{"Дизель", "Премиум", "Обычный"};

// конструктор по умолчанию
общедоступный GasPriceView () {
это (новый GasPriceController());
}

//первичный конструктор, вызывающий пользовательский интерфейс
public GasPriceView (контроллер GasPriceController) {

super("Заявка на продажу газа");
setDefaultCloseOperation (JFrame. EXIT_ON_CLOSE);
установить размер (400 500);
setVisible (истина);

this.controller = контроллер;

настроить вид();
}

//генерируем UI для приложения
частная пустота configureView() {

setLayout (новый BorderLayout());
JPanel pnl = новый JPanel (новый GridLayout (4,2,2,2));

driverName = new JLabel("Имя водителя:");
pnl.add (имя_драйвера);
nameField = новое JTextField();
pnl.add (имяПоле);
gasAmount = new JLabel("Количество газа (галлон):");
pnl.add (количество газа);
количествоПоле = новое JTextField();
pnl.add(суммаПоле);
gasType = new JLabel("Тип газа:");
pnl.add (тип газа);
typeCombo = новый JComboBox(тип);
pnl.add (типCombo);
btnClear = новая JButton("Очистить");
pnl.add (btnClear);
btnSave = новая JButton("Сохранить");
pnl.add(btnSave);

добавить (pnl, BorderLayout. ЦЕНТР);

Слушатель Действия();

}
//слушаем нажатие одной из двух кнопок
общественный недействительным ActionListener () {
btnClear.addActionListener (это);

btnSave.addActionListener (это);
}

//выполняет действие, если нажата определенная кнопка
@Override
public void actionPerformed (ActionEvent ev) {

если (ev.getSource().equals (btnClear)) {
имяПоле.setText("");
количествоПоле.setText("");
}

если (ev.getSource().equals (btnSave)){

String gasType = (String) typeCombo.getSelectedItem();
float gasAmount = Float.parseFloat (amountField.getText());
float driverTotal = controller.calculateCost(gasAmount, gasType);
Строка driverName = nameField.getText();
JOptionPane.showMessageDialog (null, driverName + "должен заплатить $" + driverTotal );

Клиент GasPriceModel = new GasPriceModel (driveName, gasAmount, gasType, driverTotal);

controller.saveEntry (клиент);
}

}
}

Представление выше создает пользовательский интерфейс, используя настроить вид() метод. Затем он собирает данные после возникновения события (через прослушиватель действий). Вышеупомянутое представление затем отправляет собранные данные контроллеру, который затем выполняет некоторые вычисления и возвращает данные в представление.

Выполнение приложения MVC

Импортировать Java.awt. очередь событий;

публичныйкласс Приложение {

публичныйстатическийпустота main (строковые аргументы []) {
Очередь событий.вызыватьпозже(
новый Работающий () {

@Override
публичныйпустота бегать() {
Контроллер GasPriceController = новый Контроллер цен на газ();
новый GasPriceView (контроллер);
}
});
}
}

Выполнение Приложение класс выше сгенерирует следующий пользовательский интерфейс:

Заполнение пользовательского интерфейса соответствующими данными приведет к созданию следующего всплывающего пользовательского интерфейса:

Если вы посмотрите на левую часть изображения выше, вы увидите, что приложение также создало новый файл с именем «данные.dat». Итак, это приложение MVC собирает данные от пользователя через пользовательский интерфейс (представление), который отправляет эти данные в Контроллер. Контроллер манипулирует данными, выполняя некоторые вычисления, а затем сохраняет эти данные в файле с помощью модели. Связанный: Ввод и вывод Java: руководство для начинающих

Ввод и вывод Java: руководство для начинающих

Если вы внимательно посмотрите на приложение, созданное в этой статье, вы обнаружите несколько очевидных преимуществ. Некоторые из этих преимуществ включают в себя:

  • Масштабируемость
  • Более простое тестирование кода
  • Создание более лаконичного кода

Но архитектура MVC — не единственный полезный шаблон проектирования, который может улучшить ваш процесс разработки.

Как создать повторно используемый код в JavaScript с помощью шаблонов проектирования

Понимание того, как использовать шаблоны проектирования, позволит вам использовать повторно используемый код в JavaScript. Вот что вам нужно знать.

Читать дальше

доляТвитнутьЭлектронное письмо
Похожие темы
  • Программирование
  • Программирование
  • Ява
Об авторе
Кадейша Кин (опубликовано 44 статьи)

Кадейша Кин (Kadeisha Kean) — разработчик программного обеспечения полного стека и технический/технологический писатель. У нее есть явная способность упрощать некоторые из самых сложных технологических концепций; производство материала, который может быть легко понят любым новичком в технологии. Она увлечена писательством, разработкой интересного программного обеспечения и путешествиями по миру (с помощью документальных фильмов).

Еще от Кадейши Кин

Подписывайтесь на нашу новостную рассылку

Подпишитесь на нашу рассылку технических советов, обзоров, бесплатных электронных книг и эксклюзивных предложений!

Нажмите здесь, чтобы подписаться