Под «верхним» контроллером, я думаю, вы подразумеваете «фронтальный» контроллер , единую точку входа для запросов в приложение. Как писал @bpanulla, большинство сред ColdFusion используют этот шаблон проектирования. Это становится особенно интересным с перезаписью URL , когда становится легко иметь безопасные URL-адреса для поисковых систем , перехватывая URL (например, domain.ext/i/am/friendly.ext
) и направляя его к какому-либо стандартному файлу, такому как index.cfm
при задании запрошенного URL-адреса в качестве параметра (часто в качестве заголовка запроса). Это также облегчает редизайн сайта, когда URL-адреса меняются легче, поскольку он хорошо подходит для псевдонимов или перенаправлений.
Что касается контроллеров, то они обычно тесно связаны с определенным URL или шаблоном URL. Возможно, это будет более слабо связано с контроллерами, но на практике я обнаружил, что это свойство проявляется после нескольких рефакторингов. В основе контроллера должно быть одно или несколько обращений к уровню службы , который обращается к базе данных, выполняет бизнес-процессы, создает объекты с сохранением состояния и т. Д. Затем контроллер получает выходные данные уровня службы и размещает их в какой-либо механизм (например, event
объект) используется для передачи данных в представление (я).
Сервисный уровень предназначен для многократного использования, а не контроллеров. Контроллеры являются просто расширением любой среды, в которой работает приложение. Идея заключается в том, что вы должны иметь возможность переключать каркасы с минимальным влиянием на представления и уровень обслуживания. Часть, которую нужно потрогать - это контроллеры.
Таким образом, данный сервисный объект на сервисном уровне должен иметь возможность обслуживать несколько контроллеров. Например, рассмотрите возможность отображения информации о зарегистрированных пользователях в качестве виджета на сайте. Могут быть разные страницы, обслуживаемые разными контроллерами, но каждая из них будет вызывать один и тот же сервисный объект для входа в пользовательские данные, которые, вероятно, могут быть переданы тому же представлению, которое отображает виджет.
Обновление: преимущества переднего контроллера
- Безопасность : централизованная аутентификация и авторизация.
- i18n & l10n : ввести нужный языковой пакет в запрос глобально
- Process Orchestration : продумайте многоэтапный процесс оформления заказа для корзины покупок, в которой вы не хотите, чтобы кнопки «назад» и «вперед» работали - перенаправляя все через передний контроллер, вы можете выполнить какой шаг (т.е. состояние)
- Ведение журнала и отслеживание : легко добавить Google Analytics или другой запрос отслеживания на сайт, сделав добавление в одном месте
- Обработка ошибок : централизованное поведение
Теперь многие из этих предметов также можно выполнить с помощью <cferror>
и Appplication.cfc
, но мне проще иметь одну централизованную точку.
Полезные ссылки