Паттерн Front Controller

Шаблон «Фронт-контроллер» используется для обеспечения централизованного механизма обработки запросов, при котором все запросы обрабатываются одним обработчиком. Обработчик может выполнять аутентификацию/авторизацию/логирование или отслеживать запросы, а затем передавать запрос соответствующему обработчику. Ниже перечислены сущности этого шаблона проектирования.

  • Фронт-контроллер- Единый обработчик, который обрабатывает все типы запросов для приложения, которое может быть веб-приложением или настольным приложением.
  • Диспетчер- Фронт-контроллер может использовать объект-диспетчер для направления запросов соответствующим конкретным обработчикам.
  • Представление— Представления — это объекты, создаваемые для запросов.

summary

назначение

Использует центральный контроллер (или обработчик) для перенаправления клиентских запросов соответствующим обработчикам.

Основные решаемые проблемы

  • Решает проблему разрозненной обработки запросов в веб-приложениях, предоставляя единую точку входа для обработки запросов.

Сценарий использования

  • Когда в веб-приложении требуется централизованное управление и диспетчеризация запросов.

Подход к реализации

  • Фронт-контроллер: Выступает единственной точкой входа для запросов, отвечая за приём и перенаправление запросов.
  • представление: Используется для отображения результатов обработки.
  • Обработчик: Компонент, который фактически выполняет обработку запроса.

Ключевой код

  • Фронт-контроллер: Содержит логику для определения, какому обработчику перенаправить запрос.
  • Сопоставление обработчиков: Сопоставляет запросы соответствующим обработчикам.

Пример приложения

  • Веб-фреймворкПримером является DispatcherServlet в Spring MVC, который действует как фронт-контроллер.

Преимущества

  1. Централизованная обработка запросов: Упрощает поток обработки запросов, делая его более удобным для управления и поддержки.
  2. Сокращение дублирования кода: Уменьшает дублирование кода в представлениях и обработчиках за счёт повторного использования контроллеров.
  3. Легко расширять: При добавлении новой логики обработки запросов нужно добавить только новый обработчик.

Недостатки

  • Может стать узким местом производительности.: Все запросы проходят через фронт-контроллер, что может повлиять на производительность.

Рекомендации по использованию

  • При создании веб-приложения, требующего чёткого процесса обработки запросов, рассмотрите возможность использования шаблона Front Controller.

Примечания

  • Убедитесь, что фронт-контроллер не стал узким местом производительности из-за централизованной обработки всех запросов.

Содержит несколько основных ролей.

Фронт-контроллер:

  • : Выступает единой точкой входа для запросов, отвечает за получение запросов и решение о том, как их обрабатывать.

Обработчик:

  • Компонент, который фактически выполняет обработку запроса.

Представление:

  • Используется для рендеринга ответа, сгенерированного обработчиком.

Сопоставление обработчиков (необязательно):

  • Сопоставляет запросы соответствующим обработчикам.

Клиент (необязательно):

  • : Веб-браузер или клиент API, который отправляет запросы.

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


Реализация

Мы создадимFrontController、DispatcherРассматриваются как фронт-контроллер и диспетчер соответственно.HomeViewиStudentViewПредставляет различные представления, созданные для запросов, получаемых фронт-контроллером.

FrontControllerPatternDemo, наш демонстрационный класс используетFrontControllerчтобы продемонстрировать паттерн проектирования фронт-контроллер.

前端控制器模式的 UML 图

Шаг 1

Создать представление.

HomeView.java

public class HomeView { public void show(){ System.out.println("Отображение главной страницы"); } }

StudentView.java

public class StudentView { public void show(){ System.out.println("Отображение страницы студента"); } }

Шаг 2

Создайте Dispatcher.

Dispatcher.java

public class Dispatcher { private StudentView studentView; private HomeView homeView; public Dispatcher(){ studentView = new StudentView(); homeView = new HomeView(); } public void dispatch(String request){ if(request.equalsIgnoreCase("STUDENT")){ studentView.show(); }else{ homeView.show(); } } }

Шаг 3

Создайте FrontController.

FrontController.java

public class FrontController { private Dispatcher dispatcher; public FrontController(){ dispatcher = new Dispatcher(); } private boolean isAuthenticUser(){ System.out.println("Пользователь успешно аутентифицирован."); return true; } private void trackRequest(String request){ System.out.println("Запрошена страница: " + request); } public void dispatchRequest(String request){ //Логировать каждый запрос trackRequest(request); //Аутентифицировать пользователей if(isAuthenticUser()){ dispatcher.dispatch(request); } } }

Шаг 4

ИспользованиеFrontControllerдля демонстрации паттерна проектирования Front Controller.

FrontControllerPatternDemo.java

public class FrontControllerPatternDemo { public static void main(String[] args) { FrontController frontController = new FrontController(); frontController.dispatchRequest("HOME"); frontController.dispatchRequest("STUDENT"); } }

Шаг 5

Выполните программу, выведите результаты:

Page requested: HOME
User is authenticated successfully.
Displaying Home Page
Page requested: STUDENT
User is authenticated successfully.
Displaying Student Page
Другие расширения