Руководство для начинающих по архитектуре MVC в Java

Опубликовано: 2018-04-10

Если вы связаны со сценой веб-разработки, вы наверняка сталкивались с аббревиатурой «MVC» сотни раз, если не больше. Сегодня MVC — один из самых обсуждаемых шаблонов проектирования в мире веб-программирования, и это правильно. В этой статье мы познакомим вас с миром архитектуры MVC. Мы поговорим об основах MVC, его преимуществах и, наконец, о простом коде, который поможет вам яснее понять реализацию MVC в Java.

Оглавление

Что такое архитектура MVC?

Прежде чем мы перейдем к техническим аспектам, давайте проясним некоторые вещи: MVC — это НЕ шаблон проектирования, это способ структурировать ваши приложения. В последние годы веб-приложения широко используют архитектуру MVC, поэтому естественно путать ее с шаблоном проектирования, предназначенным исключительно для веб-приложений. Однако давайте скажем вам, что MVC впервые был описан еще в 1979 году — до эпохи WWW, когда не было концепции веб-приложений. Архитектура, используемая сегодня для веб-приложений, представляет собой адаптацию исходного шаблона.
Фактически эта архитектура изначально была включена в две основные среды веб-разработки — Struts и Ruby on Rails. Эти две среды проложили путь для большинства веб-фреймворков, появившихся позже, и поэтому популярность этой архитектуры продолжала расти.

Научитесь создавать приложения, такие как Swiggy, Quora, IMDB и другие.

Архитектурный шаблон MVC следует элементарной идее — мы должны разделить обязанности в любом приложении на следующем основании:

  • Модель: обрабатывает данные и бизнес-логику.
  • Представление: представляет данные пользователю всякий раз, когда его запрашивают.
  • Контроллер: обрабатывает запросы пользователей и извлекает необходимые ресурсы.

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

Контроллер

Контроллер похож на экономку приложения — он выполняет координацию между моделью и представлением, чтобы обработать запрос пользователя. Запросы пользователей принимаются как HTTP-запросы на получение или отправку — например, когда пользователь нажимает на какие-либо элементы графического интерфейса для выполнения какого-либо действия.
Основная функция контроллера — вызывать модель и координировать ее действия для получения любых необходимых ресурсов, необходимых для действия. Обычно при получении запроса пользователя контроллер вызывает соответствующую модель для текущей задачи.

Модель

Модель — это просто данные для нашего приложения. Данные «смоделированы» таким образом, чтобы их было легко хранить, извлекать и редактировать. Модель — это то, как мы применяем правила к нашим данным, что в конечном итоге представляет концепции, которыми управляет наше приложение.
Для любого программного приложения все моделируется как данные, с которыми можно легко обращаться. Что такое пользователь, книга или сообщение для приложения? Ничего особенного, только данные, которые должны обрабатываться по определенным правилам. Например, дата не должна быть старше текущей даты, электронное письмо должно быть в правильном формате, имя не должно быть длиннее «x» символов и т. д.

Всякий раз, когда пользователь делает какой-либо запрос от контроллера, он связывается с соответствующей моделью, которая возвращает представление данных всего, что запросил пользователь. Эта модель будет одинаковой для конкретной работы, независимо от того, как мы хотим отобразить ее пользователю. Вот почему мы можем выбрать любой доступный вид для отображения данных модели.
Кроме того, модель также содержит логику для обновления соответствующего контроллера при любом изменении данных модели.

Вид

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

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

Давайте посмотрим на пример

Возьмем пример интернет-магазина канцелярских товаров. Пользователь может просматривать товары, покупать, добавлять товары в корзину, добавлять товары в текущий заказ или даже добавлять/удалять товары (если он является администратором).
Теперь давайте посмотрим, что произойдет, когда пользователь щелкнет заголовок «Перо», чтобы увидеть список ручек.
Наше приложение будет иметь определенный контроллер для обработки всех запросов, связанных с ручками. Допустим, он называется «pens_controller.php». У нас также будет модель, в которой будут храниться данные об имеющихся у нас ручках — назовем ее «pens_model.php». Наконец, у нас будет несколько представлений для представления данных — список перьев, таблица с перьями, страница для редактирования списка и т. д.
На следующем рисунке показан полный поток управления с момента, когда пользователь нажимает на «ручки», до момента, когда результат отображается перед ним:

Во-первых, «pens_controller.php» обрабатывает запрос пользователя (1) как запрос GET или POST. У нас также может быть «index.php», который является центральным контроллером, который будет вызывать «pens_controller» при необходимости.
Затем контроллер проверяет запрос и параметры и вызывает требуемую модель — в данном случае «pens_model.php». Контроллер просит модель вернуть список доступных ручек (2).
Теперь модель ищет в базе данных необходимую информацию (3), при необходимости применяет логику и возвращает данные контроллеру (4).
Затем контроллер выбирает соответствующий вид (5) и представляет данные (6 и 7). Если запрос поступает с портативного устройства, будет использоваться подходящее для него представление, или если у пользователя выбрана определенная тема, будет выбрано ее представление — и так далее.
Как стать полноценным разработчиком

Преимущества архитектуры MVC

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

Простая реализация MVC с использованием Java

У нас будут следующие три:

    1. StudentObject : модель.

    1. StudentView: просмотр класса для печати сведений на консоли.

  1. StudentController: контроллер, который хранит данные в studentObject и соответствующим образом обновляет StudentView.

Шаг 1: Создайте модель

 публичный класс Студент {
   частный String rollNo ;
   частное строковое имя ;
   
   общедоступная строка getRollNo () {
      возврат рулона нет ;
   }
   
   public void setRollNo ( String rollNo ) {
      это . номер рулона = номер рулона ;
   }
   
   публичная строка getName () {
      вернуть имя ;
   }
   
   public void setName ( имя строки ) {
      это . имя = имя ;
   }
}

Код говорит сам за себя. Он состоит из функций для получения/установки номера списка и имен студентов. Назовем его «student.java».
Шаг 2: Создайте представление

 открытый класс StudentView {
   public void printStudentDetails ( String studentName , String studentRollNo ){
      Система . вне . println ( "Студент:" );
      Система . вне . println ( "Имя:" + имя_ученика );
      Система . вне . println ( "RollNo:" + studentRollNo );
   }
}

Это просто для вывода значений на консоль. Назовем это «studentView.java».
Шаг 3: Создайте контроллер

 открытый класс StudentController {
   частная студенческая модель ;
   приватный вид StudentView ;
   public StudentController ( модель Student , представление StudentView ) {
      это . модель = модель ;
      это . вид = вид ;
   }
   public void setStudentName ( Строковое имя ){
модель . setName ( имя );
   }
   общедоступная строка getStudentName () {
      модель возврата . получитьИмя ();
   }
   public void setStudentRollNo ( String rollNo ){
модель . setRollNo ( номер рулона );
   }
   общедоступная строка getStudentRollNo () {
      модель возврата . получитьроллнет ();
   }
   public void updateView () {
вид . printStudentDetails ( model.getName () , model.getRollNo ( ) ) ;
   }
}

Назовите это «StudentController.java». Беглый взгляд скажет вам, что этот контроллер просто отвечает за вызов модели для получения/установки данных, а затем за обновление представления.
Теперь давайте посмотрим, как все это связано вместе.
Шаг 4: Создайте основной файл Java

 открытый класс MVCPatternDemo {
   public static void main ( String [] args ) {
      // извлекаем запись ученика на основе его номера списка из базы данных
      Модель студента = retriveStudentFromDatabase ();
      //Создаем представление: для записи сведений о студенте в консоль
      Представление StudentView = новый StudentView ();
      Контроллер StudentController = новый StudentController ( модель , представление );
контроллер . обновить вид ();
      //обновляем данные модели
контроллер . setStudentName ( "Джон" );
контроллер . обновить вид ();
   }
   частный статический студент retriveStudentFromDatabase (){
      Студент студент = новый студент ();
студент . setName ( "Роберт" );
студент . setRollNo ( "10" );
      возвратный студент ;
   }
}

Это называется «MVCPatternDemo.java». Как вы можете видеть, он извлекает данные об учениках из базы данных или функции (в данном случае мы используем функцию для установки значений) и помещает их в модель ученика. Затем он инициализирует представление, которое мы создали ранее.
Кроме того, он также инициализирует наш контроллер и привязывает его к модели и представлению. Метод updateView() является частью контроллера, который обновляет сведения об ученике на консоли.
Шаг 5: Проверьте результат
Если все пойдет правильно, результат должен быть:

 Ученик:
Имя: Роберт
Рулон №: 10
Ученик:
Имя: Джон
Рулон №: 10

Если вы получите это в качестве вывода, поздравляем! Вы успешно реализовали архитектуру MVC с помощью Java, хотя и для простого приложения. Несмотря на простоту, этого приложения достаточно, чтобы продемонстрировать возможности архитектуры MVC.
15 обязательных вопросов для интервью Spring MVC

Завершение…
После стольких сказанного и сделанного в наши дни трудно выделить больше возможностей архитектуры MVC в любом веб-приложении или настольном приложении. Он обеспечивает совершенно новый уровень модульности вашего кода, что делает его более читабельным и удобным в сопровождении. Итак, если вы хотите достичь новых высот в своей карьере разработчика приложений, овладение архитектурой MVC и ее работой должно быть вашим главным приоритетом.

Запишитесь на курсы по разработке программного обеспечения в лучших университетах мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.

Оставьте комментарий и дайте нам знать, как вам эта статья!

Станьте разработчиком полного стека

Диплом PG UpGrad и IIIT-Bangalore в области разработки программного обеспечения
Подать заявку на получение степени магистра в области разработки программного обеспечения