Что это?
Думаю многие из программистов понимают необходимость разделять контроллеры (или, как еще говорят, бизнес-логику) от вида (или логики отображения). Это упрощает поддержку, редизайн и реализацию скинов. Реализаций этого безобразия существует огромное количество и я хотел бы и свои пять копеек вставить :)
Вы можете найти огромное количество топиков на эту тему, но в основном они касаются «вида», точнее всяческих шаблонизаторов. Я не буду сейчас об этом, иначе это превратится в очередной холивар. Темя этой статьи — контроллер, а точнее моя его реализация, хотя отображения это тоже касается :).
Если где-то есть нечто похожее буду благодарен за указание источников.
Зачем это?
Кроме разделения программной системы на модули программистов интересует еще и повторное использование кода, чтобы не писать одно и то же по двадцать раз и не использовать копипаст, что ведет к ошибкам.
Что мы имеем сейчас?
Поскольку страницы очень часто имеют много общего, то часто мы имеем нечто вроди:
{?php include "header.php" ?} some content {?php include "footer.php" ?}
или
header {?php include "{$module}.php" ?} footer
Недостатки первого подхода очевидны, второй же подход не очень хорош с точки зрения контроллера
Как это?
Идея состоит в использовании объектно-ориентированого подхода (поскольку перегрузки функций в PHP нет)
{?php # main controller class Main_Cntr { function render() { # some logic include 'main.tpl'; } function content() { # some logic include 'default_content.tpl'; } function module() { # some logic include 'default_module.tpl'; } };
Теперь в целосном шаблоне
main.tpl
будут прямые указания:...header... {?php $this->content() ?} ...some view... {?php $this->module() ?} ...footer...
Преимущество подхода состоит в том, что мы можем выстраивать иерархию страниц, порождая потомков:
{?php # main controller class Other_Cntr extends Main_Cntr { function content() { # some other logic include 'other_content.tpl'; } };
При этом наследуются все свойства базового вида и контроллера, нужно написать минимум кода, который непосредственно касается изменений, контроллер и вид отдельно.
Заключение
Естественно детали реализации могут быть изменены, тут могут быть использованы любые шаблонизаторы.
- Код шаблонов остается абсолютно читабельным и понятным — используется абстрактная разметка логических элементов страницы.
Код контроллеров так же понятен и прост, упрощается создание однотипных шаблонов и повторяющихся элементов на страницах.
Буду рад конструктивным замечаниям и комментариям.
P.S.: Со знаками больше-меньше какие-то глюки, пришлось постить фигурные скобки.