Jump to content

Передний контроллер

Шаблон фронт-контроллера проектирования программного обеспечения указан в нескольких каталогах шаблонов и связан с разработкой веб-приложений. Это « контроллер , который обрабатывает все запросы к веб-сайту ». [1] Это полезная структура для разработчиков веб-приложений, позволяющая добиться гибкости и повторного использования без избыточности кода.

Инструкция

[ редактировать ]
Типичная структура фронт-контроллера.

Фронт-контроллеры часто используются в веб-приложениях для реализации рабочих процессов. Хотя это и не является строго обязательным, гораздо проще управлять навигацией по набору связанных страниц (например, нескольким страницам, используемым при онлайн-покупке) с помощью фронт-контроллера, чем назначать ответственность за навигацию на отдельные страницы.

Фронт-контроллер может быть реализован как объект Java или как скрипт на языке сценариев, таком как PHP , Raku , Python или Ruby , который вызывается для каждого запроса веб- сеанса . Этот сценарий будет выполнять все задачи, общие для приложения или платформы, такие как обработка сеансов, кэширование и фильтрация входных данных. На основе конкретного запроса он затем создает экземпляры дополнительных объектов и вызывает методы для выполнения необходимых задач.

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

Несколько инфраструктур веб-приложений реализуют шаблон фронт-контроллера:

Выполнение

[ редактировать ]

Фронт-контроллеры можно разделить на три компонента:

  1. Сопоставление XML : файлы, которые сопоставляют запросы с классом, который будет обрабатывать запросы.
  2. Обработчик запросов: используется для обработки запросов и изменения или получения соответствующей модели.
  3. Менеджер потока: определяет, что будет показано на следующей странице.

Участники и обязанности

[ редактировать ]
Контроллер Диспетчер Помощник Вид
Контроллер — это вход для пользователей для обработки запросов в системе. Он реализует аутентификацию, играя роль делегирующего помощника или инициируя поиск контактов. Диспетчеры можно использовать для навигации и управления выводом представления. Пользователи получат следующее представление, определенное диспетчером. Диспетчеры также обладают гибкостью; они могут быть инкапсулированы непосредственно внутри контроллера или выделены в другой компонент. Диспетчер обеспечивает статическое представление наряду с динамическим механизмом. Помощники помогают в обработке представлений или контроллеров.

Со стороны просмотра помощник собирает данные и иногда сохраняет их в качестве промежуточной станции. Помощники выполняют определенные предварительные процессы, такие как форматирование данных для веб-контента или предоставление прямого доступа к необработанным данным. Несколько помощников могут сотрудничать с одним представлением в большинстве случаев. Дополнительно помощник работает как преобразователь, который адаптирует и преобразует модель в подходящий формат.

При сотрудничестве помощников представления отображают информацию клиенту путем обработки данных из модели. Представление отобразится, если обработка прошла успешно, и наоборот.

Пример реализации 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

[ редактировать ]
  1. Чтобы повысить надежность и удобство обслуживания системы, следует избегать дублирования кода и централизовать его, когда он включает общую логику, используемую во всей системе.
  2. Данные приложения лучше всего обрабатывать в одном месте, что позволяет избежать необходимости дублирования кода получения данных.
  3. Различные роли в шаблоне модель-представление-контроллер (MVC) должны быть разделены, чтобы повысить тестируемость, что также справедливо для части контроллера в шаблоне MVC.

Сравнение

[ редактировать ]

Шаблон контроллера страниц является альтернативой подходу фронт-контроллера в модели MVC.

Контроллер страниц Передний контроллер
Базовый класс Базовый класс необходим и будет расти одновременно с разработкой приложения. Централизацию запросов легче изменить, чем базовый класс.
Безопасность Низкая безопасность, поскольку различные объекты реагируют по-разному и несогласованно. Высокий, потому что контроллер реализован скоординированно.
Логическая страница Один объект на каждой логической странице. Все запросы обрабатывает только один контроллер.
Сложность Низкий Высокий

См. также

[ редактировать ]
  1. ^ Фаулер, Мартин . «Фронт-контролер» . Проверено 26 сентября 2017 г.
  2. ^ «Веб-фреймворк MVC» . Справочная документация Spring Framework . Ключевое программное обеспечение . Проверено 26 сентября 2017 г.
  3. ^ «Демо-код на Java» . Архивировано из оригинала 19 апреля 2012 г. {{cite web}}: CS1 maint: bot: исходный статус URL неизвестен ( ссылка )
  4. ^ «Преимущества использования фронт-контроллера» . 17 марта 2014 г.

Примечания

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 642daab4cc8fbc3ac1e11cdf41f74d49__1714977900
URL1:https://arc.ask3.ru/arc/aa/64/49/642daab4cc8fbc3ac1e11cdf41f74d49.html
Заголовок, (Title) документа по адресу, URL1:
Front controller - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)