Front controller
Front Controller (фронт-контролер, єдина точка входу) - шаблон проєктування, який є спеціалізованою варіацією шаблону проєктування Посередник. Задачею фронт-контролера є надання єдиної точки входу для обробки усіх запитів та виклик відповідної поведінки залежно від запиту.
Фронт-контролер найчастіше використовується у вебзастосунках, де є багато подібних речей, які потрібно виконати при обробці запиту. Це може бути безпека, інтернаціоналізація, забезпечення певного вигляду для певних користувачів. Якщо обробка вхідних запитів розподілена між кількома контролерами це може призвести до дублювання поведінки. Крім того, виникають складності зі зміною поведінки під час виконання. Фронт-контролер об'єднує обробку запитів шляхом їх направлення через єдиний об'єкт-обробник. Цей об'єкт реалізовує загальну поведінку, яка може бути змінена під час виконання за допомогою декораторів. Після цього Front controller створює потрібні об'єкти відповідно до запиту та викликає методи для реалізації конкретної задачі.
Фронт-контролер може бути реалізований у вигляді Java-об'єкта, або, як скрипт PHP, ASP, JSP або CFML, що викликається на кожен запит вебсесії. Цей скрипт, наприклад index.php, буде обробляти всі запити, що є спільними для вебзастосування або фреймворку, наприклад обробка сесій, кешування і фільтрація вхідних даних.
Альтернативою фронт-контролеру можуть бути окремі скрипти, наприклад login.php і order.php для обробки певного типу запиту. Кожному скрипту доведеться дублювати код або об'єкти, які є спільними для всіх запитів, але кожен скрипт має порівняно більшу гнучкість для обробки конкретного запиту.
Приклади
Zend Framework та інші MVC фреймворки PHP
Джерела
Martin Fowler. Front Controller [Архівовано 21 квітня 2012 у Wayback Machine.]
Посилання
- Zend Framework front controller
Див. також
Посередник (шаблон проєктування)
- п
- о
- р
конкурентного
програмування
Базові шаблони | Клієнт-серверна архітектура • Front end та back end • Триярусна архітектура • Гексагональна архітектура (Архітектура портів та адаптерів) • Відокремлений інтерфейс (Separated Interface) • Сервісно-орієнтована архітектура • Мікросервіси • Push/Pull модель |
---|---|
Шаблони об'єктного структурування | |
Шаблони представлення | |
Шаблони предметно-орієнтованого проєктування | Rich/Anemic модель • DDD • Інваріант • Entity • Value Object • Aggregate Root • DTO • Repository • Патерн сервісного рівня (Service Layer) • Фабричний метод (Factory Method) • Специфікація |
Шаблони сервісно-орієнтованої архітектури | Сервісно-орієнтована архітектура • Мікросервіси • Шлюз (Gateway) • Публікація-підписка • Інтеграційна шина даних • Event Sourcing • Двофазна транзакція • Saga • Circuit breaker • Асинхронна http модель |
корпоративних
програмних
додатків
Базові шаблони | Об'єкт-значення (Value Object) • Гроші (Money) • Особливий випадок (Special Case) • Супертип рівня (Layer Supertype) • Відокремлений інтерфейс (Separated Interface) • Шлюз (Gateway) • Розподільник (Mapper) • Реєстр (Registry) • Плагін (Plugin) • Набір записів (Record Set) • Заглушка сервісу (Service Stub) |
---|---|
Шаблони логіки домену | Сценарій транзакції (Transaction script) • Модель предметної області (Domain model) • Обробник таблиці (Table Module) • Патерн сервісного рівня (Service Layer) |
Шаблони сховища даних | Активний запис (Active Record) • Шлюз до даних таблиці (Table Data Gateway) • Шлюз до даних запису (Row Data Gateway) • Відображення даних (Data Mapper) |
Шаблони об'єктно-реляційної поведінки | Одиниця роботи (Unit Of Work) • Мапа відповідності (Identity Map) • Ліниве завантажування (Lazy Load) |
Шаблони об'єктно-реляційного структурування | Поле первинного ключа (Identity Field) • Розмітка зовнішніх ключів (Foreign Key Mapping) • Розмітка зв'язків таблиць (Association Table Mapping) • Відображення залежних об'єктів (Dependent Mapping) • Об'єднане значення (Embedded Value) • Серіалізований великий об'єкт (Serialized LOB) • Наслідування з однією таблицею (Single Table Inheritance) • Наслідування з таблицею для кожного класу (Class Table Inheritance) • Наслідування з таблицею для кожного конкретного класу (Concrete Table Inheritance) • Відображення із наслідуванням (Inheritance Mappers) • База даних звітності |
Шаблони обробки об'єктно-реляційних метаданих | Відображення на основі метаданих (Metadata Mapping) • Об'єкт-запит (Query Object) • Сховище (Repository) |
Шаблони вебпредставлення | Модель-вид-контролер (Model View Controller) • Контролер сторінки (Page Controller) • Єдина точка входу (Front controller) • Контролер аплікації (Application Controller) • Шаблонізатор (Template View) • Перетворювач (Transform View) • Двокрокова шаблонізація (Two Step View) |
Шаблони розподіленої обробки даних | Фасад (Remote Facade) • Об'єкт передачі даних (Data Transfer Object) |
Шаблони локального конкурентного програмування | Оптимістичне блокування (Optimistic Offline Lock) • Песимістичне блокування (Pessimistic Offline Lock) • Блокування із низьким рівнем деталізації (Coarse Grained Lock) • Неявне блокування (Implicit Lock) |
Шаблони збереження стану сеансу | Збереження стану сеансу на стороні клієнта (Client Session State) • Збереження стану сеансу на стороні сервера (Server Session State) • Збереження стану сеансу в базі даних (Database Session State) |