Паттерн Front Controller
Шаблон «Фронт-контроллер» используется для обеспечения централизованного механизма обработки запросов, при котором все запросы обрабатываются одним обработчиком. Обработчик может выполнять аутентификацию/авторизацию/логирование или отслеживать запросы, а затем передавать запрос соответствующему обработчику. Ниже перечислены сущности этого шаблона проектирования.
- Фронт-контроллер- Единый обработчик, который обрабатывает все типы запросов для приложения, которое может быть веб-приложением или настольным приложением.
- Диспетчер- Фронт-контроллер может использовать объект-диспетчер для направления запросов соответствующим конкретным обработчикам.
- Представление— Представления — это объекты, создаваемые для запросов.
summary
назначение
Использует центральный контроллер (или обработчик) для перенаправления клиентских запросов соответствующим обработчикам.
Основные решаемые проблемы
- Решает проблему разрозненной обработки запросов в веб-приложениях, предоставляя единую точку входа для обработки запросов.
Сценарий использования
- Когда в веб-приложении требуется централизованное управление и диспетчеризация запросов.
Подход к реализации
- Фронт-контроллер: Выступает единственной точкой входа для запросов, отвечая за приём и перенаправление запросов.
- представление: Используется для отображения результатов обработки.
- Обработчик: Компонент, который фактически выполняет обработку запроса.
Ключевой код
- Фронт-контроллер: Содержит логику для определения, какому обработчику перенаправить запрос.
- Сопоставление обработчиков: Сопоставляет запросы соответствующим обработчикам.
Пример приложения
- Веб-фреймворкПримером является DispatcherServlet в Spring MVC, который действует как фронт-контроллер.
Преимущества
- Централизованная обработка запросов: Упрощает поток обработки запросов, делая его более удобным для управления и поддержки.
- Сокращение дублирования кода: Уменьшает дублирование кода в представлениях и обработчиках за счёт повторного использования контроллеров.
- Легко расширять: При добавлении новой логики обработки запросов нужно добавить только новый обработчик.
Недостатки
- Может стать узким местом производительности.: Все запросы проходят через фронт-контроллер, что может повлиять на производительность.
Рекомендации по использованию
- При создании веб-приложения, требующего чёткого процесса обработки запросов, рассмотрите возможность использования шаблона Front Controller.
Примечания
- Убедитесь, что фронт-контроллер не стал узким местом производительности из-за централизованной обработки всех запросов.
Содержит несколько основных ролей.
Фронт-контроллер:
- : Выступает единой точкой входа для запросов, отвечает за получение запросов и решение о том, как их обрабатывать.
Обработчик:
- Компонент, который фактически выполняет обработку запроса.
Представление:
- Используется для рендеринга ответа, сгенерированного обработчиком.
Сопоставление обработчиков (необязательно):
- Сопоставляет запросы соответствующим обработчикам.
Клиент (необязательно):
- : Веб-браузер или клиент API, который отправляет запросы.
Паттерн Front Controller помогает создавать веб-приложения, которые легко поддерживать и расширять, предоставляя централизованный механизм обработки запросов.
Реализация
Мы создадимFrontController、DispatcherРассматриваются как фронт-контроллер и диспетчер соответственно.HomeViewиStudentViewПредставляет различные представления, созданные для запросов, получаемых фронт-контроллером.
FrontControllerPatternDemo, наш демонстрационный класс используетFrontControllerчтобы продемонстрировать паттерн проектирования фронт-контроллер.
Шаг 1
Создать представление.
HomeView.java
StudentView.java
Шаг 2
Создайте Dispatcher.
Dispatcher.java
Шаг 3
Создайте FrontController.
FrontController.java
Шаг 4
ИспользованиеFrontControllerдля демонстрации паттерна проектирования Front Controller.
FrontControllerPatternDemo.java
Шаг 5
Выполните программу, выведите результаты:
Page requested: HOME User is authenticated successfully. Displaying Home Page Page requested: STUDENT User is authenticated successfully. Displaying Student PageДругие расширения