Фронт - контроллер шаблон проектирование указано в нескольких каталогах шаблонов и связанный с конструкцией веб - приложений. Это « контроллер, который обрабатывает все запросы к веб-сайту » [1], который является полезной структурой для разработчиков веб-приложений для достижения гибкости и повторного использования без избыточности кода.
Инструкция
Фронт-контроллеры часто используются в веб-приложениях для реализации рабочих процессов. Хотя это и не обязательно, гораздо проще управлять навигацией по набору связанных страниц (например, нескольким страницам, используемым при онлайн-покупке) с фронт-контроллера, чем делать отдельные страницы ответственными за навигацию.
Фронт-контроллер может быть реализован как объект Java или как сценарий на языке сценариев, таком как PHP , Raku , Python или Ruby, который вызывается при каждом запросе веб- сеанса . Этот сценарий, например index.php , будет обрабатывать все задачи, общие для приложения или платформы, такие как обработка сеанса, кэширование и фильтрация ввода. На основе конкретного запроса он затем будет создавать экземпляры дополнительных объектов и вызывать методы для обработки конкретных требуемых задач.
Альтернативой фронт-контроллеру могут быть отдельные скрипты, такие как login.php и order.php , каждый из которых затем удовлетворяет типу запроса. Каждый сценарий должен дублировать код или объекты, общие для всех задач. Однако каждый сценарий может обладать большей гибкостью для реализации конкретной требуемой задачи.
Примеры
Несколько фреймворков приложений веб-уровня реализуют шаблон фронтального контроллера, среди них:
- Стойки Apache
- ASP.NET MVC
- Фреймворк Cairngorm в Adobe Flex
- Фреймворки Cro [1] или Bailador [2] в Raku
- Drupal
- Фреймворки MVC, написанные на PHP . Например, Yii , CakePHP , Laravel , Symfony , CodeIgniter и Laminas.
- Spring Framework [2]
- Yesod (веб-фреймворк), написанный на Haskell
Выполнение
Чтобы лучше понять шаблон фронт-контроллера, есть пример реализации фронт-контроллера на Java. [3] Его можно разделить на 3 компонента:
- XML Mapping: файлы, которые сопоставляют запросы с классом, который будет обрабатывать запрос.
- Обработчик запросов: используется для обработки запроса (и изменения или получения соответствующей модели).
- Менеджер потока: сначала получите запрос и результат обработки, затем определите, что будет отображаться на следующей странице.
Участники и обязанности
Контроллер | Диспетчер | Помощник | Вид |
---|---|---|---|
Контроллер - это вход для пользователей для обработки запросов в системе. Он реализует аутентификацию, играя роль делегата-помощника или инициируя поиск контактов. | Диспетчеры могут использоваться для навигации и управления выводом представления. Пользователи получат следующее представление, определяемое диспетчером. Диспетчеры также гибки: они могут быть инкапсулированы непосредственно в контроллере или отделены от другого компонента. Диспетчер предоставляет статическое представление вместе с динамическим механизмом. Он также использует объект RequestDispatcher (поддерживается в спецификации сервлета) и инкапсулирует некоторую дополнительную обработку. | Помощник помогает представлению или контроллеру обрабатывать. Таким образом помощник может достигать самых разных целей. На стороне просмотра помощник собирает данные и иногда сохраняет данные как промежуточную станцию. Перед процессом представления помощники служат для адаптации модели данных для него. Помощники выполняют определенные предварительные процессы, такие как форматирование данных для веб-содержимого или предоставление прямого доступа к необработанным данным. Несколько помощников могут сотрудничать с одним представлением для большинства условий. Они реализованы в виде компонентов JavaBeans в JSP 1.0+ и пользовательских тегов в JSP 1.1+. Кроме того, помощник также работает как преобразователь, который используется для адаптации и преобразования модели в подходящий формат. | В сотрудничестве с помощниками просмотр отображает информацию для клиента. Он обрабатывает данные из модели. Представление отобразится, если обработка завершится успешно, и наоборот. |
Демонстрационная реализация на Java
Вот часть демонстрационного кода для реализации фронт-контроллера. [4]
private void doProcess ( запрос HttpServletRequest , HttpServletResponse ответ ) выбрасывает IOException , ServletException { ... попробуйте { getRequestProcessor (). processRequest ( запрос ); getScreenFlowManager (). forwardToNextScreen ( запрос , ответ ); } catch ( Throwable ex ) { Строка className = ex . getClass (). getName (); nextScreen = getScreenFlowManager (). getExceptionScreen ( ex ); // Помещаем исключение в запрос запрос . setAttribute ( "javax.servlet.jsp.jspException" , ex ); if ( nextScreen == null ) { // Отправляем на экран общей ошибки напр . printStackTrace (); throw new ServletException ( "MainServlet: неизвестное исключение:" + className ); } }
Выгоды и обязательства
Использование шаблона переднего контроллера дает три преимущества. [5]
- Централизованное управление . Фронт-контроллер обрабатывает все запросы к веб-приложению . Такая реализация централизованного управления, позволяющая избежать использования нескольких контроллеров, желательна для применения политик в масштабе всего приложения, таких как отслеживание пользователей и безопасность.
- Безопасность потоков . Новый командный объект возникает при получении нового запроса, и командные объекты не предназначены для обеспечения потоковой безопасности. Таким образом, в командных классах будет безопасно. Хотя безопасность не гарантируется при сборе проблем с потоками, коды, которые работают с командой, по-прежнему являются потокобезопасными.
- Конфигурируемость . Поскольку в веб-приложении требуется только один фронт-контроллер, настройка реализации веб-приложений значительно упрощается. Обработчик выполняет остальную часть диспетчеризации, поэтому не требуется ничего менять перед добавлением новых команд с динамическими.
Что касается ответственности, то производительность передних контроллеров, определяющих следующие действия путем поиска в базе данных или XML-документах, может снизиться. А внедрение фронт-контроллера в существующие системы всегда предполагает замену текущих, что усложняет начало работы новичков.
Связь с шаблоном MVC
- Чтобы повысить надежность и ремонтопригодность системы, следует избегать дублирования кодов и централизовать их, когда они имеют одну и ту же общую логику во всей системе.
- Данные для приложения лучше обрабатывать в одном месте, поэтому нет необходимости дублировать код поиска базы данных.
- Различные роли в шаблоне MVC должны быть разделены для повышения тестируемости, что также верно для части контроллера в шаблоне MVC.
Сравнение
Контроллер страницы является альтернативой фронт-контроллеру в модели MVC.
Контроллер страницы | Передний Контроллер | |
---|---|---|
Базовый класс | Базовый класс необходим и будет расти одновременно с развитием приложения. | Централизацию решения всех запросов легче изменить, чем метод базового класса. |
Безопасность | Низкая безопасность, потому что разные объекты реагируют по-разному и не согласованно. | Высокая. Контроллер реализован скоординированно, что делает приложение более безопасным. |
Логическая страница | Один объект на каждой логической странице. | Только один контроллер обрабатывает все запросы. |
Сложность | Низкий | Высокая |
Смотрите также
- Шаблон проектирования (информатика) .
- Шаблон посредника (примечание: шаблон переднего контроллера - это особый вид шаблона посредника)
Рекомендации
- ^ Фаулер, Мартин . «Фронт-контроллер» . Проверено 26 сентября 2017 года .
- ^ «Фреймворк Web MVC» . Справочная документация по Spring Framework . Основное программное обеспечение . Проверено 26 сентября 2017 года .
- ^ «Шаблон переднего контроллера» .
- ^ «Демо-код на Java» . Архивировано 19 апреля 2012 года.CS1 maint: bot: исходный статус URL неизвестен ( ссылка )
- ^ «Преимущества использования фронтального контроллера» .
Заметки
- Алур, Дипак; Джон Крап; Дэн Малкс (2003). Основные шаблоны J2EE, передовой опыт и стратегии проектирования, 2-е изд . Пресса Sun Microsystems. С. 650с. ISBN 0-13-142246-4.
- Фаулер, Мартин (2003). Паттерны архитектуры корпоративных приложений . стр. 560 стр. ISBN 978-0-321-12742-6.
Внешние ссылки
- Bear Bibeault Front Man ™ , облегченная реализация Java.