Передний контроллер
Эта статья нуждается в дополнительных цитатах для проверки . ( ноябрь 2022 г. ) |
Шаблон фронт-контроллера проектирования программного обеспечения указан в нескольких каталогах шаблонов и связан с разработкой веб-приложений. Это « контроллер , который обрабатывает все запросы к веб-сайту ». [1] Это полезная структура для разработчиков веб-приложений, позволяющая добиться гибкости и повторного использования без избыточности кода.
Инструкция
[ редактировать ]
Фронт-контроллеры часто используются в веб-приложениях для реализации рабочих процессов. Хотя это и не является строго обязательным, гораздо проще управлять навигацией по набору связанных страниц (например, нескольким страницам, используемым при онлайн-покупке) с помощью фронт-контроллера, чем назначать ответственность за навигацию на отдельные страницы.
Фронт-контроллер может быть реализован как объект Java или как скрипт на языке сценариев, таком как PHP , Raku , Python или Ruby , который вызывается для каждого запроса веб- сеанса . Этот сценарий будет выполнять все задачи, общие для приложения или платформы, такие как обработка сеансов, кэширование и фильтрация входных данных. На основе конкретного запроса он затем создает экземпляры дополнительных объектов и вызывает методы для выполнения необходимых задач.
Альтернативой фронт-контроллеру является использование контроллеров страниц, сопоставленных с каждой страницей или путем сайта. Хотя это может привести к тому, что каждый отдельный контроллер будет содержать дублирующийся код, подход на основе контроллера страниц обеспечивает высокую степень специализации.
Примеры
[ редактировать ]Несколько инфраструктур веб-приложений реализуют шаблон фронт-контроллера:
- Апач Стратс
- АСП.NET MVC
- Фреймворк Cairngorm в Adobe Flex
- Фреймворки Cro или Bailador в Raku
- Друпал
- MVC Фреймворки , написанные на PHP , такие как Yii , CakePHP , Laravel , Symfony , CodeIgniter и Laminas.
- Весенняя структура [2]
- Йесод , написанный на Haskell
Выполнение
[ редактировать ]Фронт-контроллеры можно разделить на три компонента:
- Сопоставление XML : файлы, которые сопоставляют запросы с классом, который будет обрабатывать запросы.
- Обработчик запросов: используется для обработки запросов и изменения или получения соответствующей модели.
- Менеджер потока: определяет, что будет показано на следующей странице.
Участники и обязанности
[ редактировать ]Контроллер | Диспетчер | Помощник | Вид |
---|---|---|---|
Контроллер — это вход для пользователей для обработки запросов в системе. Он реализует аутентификацию, играя роль делегирующего помощника или инициируя поиск контактов. | Диспетчеры можно использовать для навигации и управления выводом представления. Пользователи получат следующее представление, определенное диспетчером. Диспетчеры также обладают гибкостью; они могут быть инкапсулированы непосредственно внутри контроллера или выделены в другой компонент. Диспетчер обеспечивает статическое представление наряду с динамическим механизмом. | Помощники помогают в обработке представлений или контроллеров.
Со стороны просмотра помощник собирает данные и иногда сохраняет их в качестве промежуточной станции. Помощники выполняют определенные предварительные процессы, такие как форматирование данных для веб-контента или предоставление прямого доступа к необработанным данным. Несколько помощников могут сотрудничать с одним представлением в большинстве случаев. Дополнительно помощник работает как преобразователь, который адаптирует и преобразует модель в подходящий формат. |
При сотрудничестве помощников представления отображают информацию клиенту путем обработки данных из модели. Представление отобразится, если обработка прошла успешно, и наоборот. |
Пример реализации Java
[ редактировать ]Фронт-контроллер реализован в Java-коде: [3]
private void doProcess(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
...
try {
getRequestProcessor().processRequest(request);
getScreenFlowManager().forwardToNextScreen(request, response);
} catch (Throwable ex) {
String className = ex.getClass().getName();
nextScreen = getScreenFlowManager().getExceptionScreen(ex);
// Put the exception in the request
request.setAttribute("javax.servlet.jsp.jspException", ex);
if (nextScreen == null) {
// Send to general error screen
ex.printStackTrace();
throw new ServletException("MainServlet: unknown exception: " +
className);
}
}
Преимущества и обязательства
[ редактировать ]Есть три основных преимущества, связанных с шаблоном фронт-контроллера. [4]
- Централизованное управление . Фронт-контроллер обрабатывает все запросы к веб-приложению . Такая реализация централизованного управления, позволяющая избежать использования нескольких контроллеров, желательна для обеспечения соблюдения политик всего приложения, таких как отслеживание пользователей и безопасность.
- Безопасность резьбы . Новый объект команды возникает при получении нового запроса, и объекты команды не предназначены для потокобезопасности. Таким образом, в командных классах будет безопасно. Хотя безопасность не гарантируется при обнаружении проблем с потоками, код, который взаимодействует с командами, по-прежнему является потокобезопасным.
- Конфигурируемость . Поскольку в веб-приложении используется только один фронт-контроллер, конфигурация приложения может быть значительно упрощена. Поскольку обработчик разделяет ответственность за диспетчеризацию, можно добавлять новые команды без внесения необходимых изменений в код.
Шаблон фронт-контроллера может вызвать проблемы с производительностью, поскольку один контроллер выполняет большой объем работы, а обработчики могут создавать узкие места, если они включают запросы к базе данных или документам. Подход фронт-контроллера также более сложен, чем подход контроллеров страниц.
Отношения с MVC
[ редактировать ]- Чтобы повысить надежность и удобство обслуживания системы, следует избегать дублирования кода и централизовать его, когда он включает общую логику, используемую во всей системе.
- Данные приложения лучше всего обрабатывать в одном месте, что позволяет избежать необходимости дублирования кода получения данных.
- Различные роли в шаблоне модель-представление-контроллер (MVC) должны быть разделены, чтобы повысить тестируемость, что также справедливо для части контроллера в шаблоне MVC.
Сравнение
[ редактировать ]Шаблон контроллера страниц является альтернативой подходу фронт-контроллера в модели MVC.
Контроллер страниц | Передний контроллер | |
---|---|---|
Базовый класс | Базовый класс необходим и будет расти одновременно с разработкой приложения. | Централизацию запросов легче изменить, чем базовый класс. |
Безопасность | Низкая безопасность, поскольку различные объекты реагируют по-разному и несогласованно. | Высокий, потому что контроллер реализован скоординированно. |
Логическая страница | Один объект на каждой логической странице. | Все запросы обрабатывает только один контроллер. |
Сложность | Низкий | Высокий |
См. также
[ редактировать ]- Паттерн проектирования (информатика) .
- Шаблон посредника (примечание: шаблон переднего контроллера — это специализированный вид шаблона посредника)
Ссылки
[ редактировать ]- ^ Фаулер, Мартин . «Фронт-контролер» . Проверено 26 сентября 2017 г.
- ^ «Веб-фреймворк MVC» . Справочная документация Spring Framework . Ключевое программное обеспечение . Проверено 26 сентября 2017 г.
- ^ «Демо-код на Java» . Архивировано из оригинала 19 апреля 2012 г.
{{cite web}}
: CS1 maint: bot: исходный статус URL неизвестен ( ссылка ) - ^ «Преимущества использования фронт-контроллера» . 17 марта 2014 г.
Примечания
[ редактировать ]- Алур, Дипак; Джон Крап; Дэн Малкс (2003). Основные шаблоны J2EE, лучшие практики и стратегии проектирования, 2-е изд . Сан Микросистемс Пресс. стр. 650стр. ISBN 0-13-142246-4 .
- Фаулер, Мартин (2003). Шаблоны архитектуры корпоративных приложений . Аддисон-Уэсли Профессионал. стр. 560стр. ISBN 978-0-321-12742-6 .
Внешние ссылки
[ редактировать ]- Front Man™ от Bear Bibeault — облегченная реализация Java.