Дмитрий Попов
сторож
Околонаучные рассуждения о пользе и вреде шаблонных движков (вроде не флейм)
Вот, тут возникли у меня некоторые мысли по поводу шаблонизаторов. Не знаю, правильно ли такие темы создавать в «для продвинутых», но, боюсь, в оффтопике тему очень быстро превратят в помойку, хотя возможно что то, что я напишу и есть помойка. Тогда переносите в оффтоп.
Так вот. На форумах постоянно мелькают споры, о том, хорошо или плохо – эти шаблоназаторы. При чем в обсуждении учавствуют, как правило сторонники трёх подоходов:
1. Сторонники шаблонов и специальных шаблонизаторов, руководствующиеся, в первую очередь, принципом разделения кода и оформления.
2. Сторонники сложных шаблонных движков, которые руководствуются принципом, что в шаблоне должно быть не только оформление в чистом виде, но и логика отображения. Сюда можно отнести, в т.ч. любителей MVC.
3. Противники шаблонных движков, считающие что отдельный шаблонизатор – лишнее звено благо PHP сам по себе является шаблонизатором.
Ну и все обсуждения между этими тремя группами в итоге заканчиваются флеймом, и ни до чего не доходят.
А я тут задумался вот над чем. Если посмотреть мануал по PHP, то самым первым что мы увидем, это раздел «Что такое PHP», в котором в первую очередь приводится как плюс то, что можно мешать HTML и PHP. При этом приводится пример, из-за которого любой новичек может начать писать код именно так, как нельзя писать – полностью смешивая в одну кучу всё – и данные и дизайн и оформление. Однако же любой более ли менее опытный PHP-шник прекрасно понимает, что да – это плюс языка, но далеко не самый важный.
Так вот и касаемо шаблонизаторов – является ли главной причиной их использования то, что шаблонизатор разделяет код и оформление? А может быть это всего-лишь «фишка», дополнительный плюс?
Очередной раз перерабатывая свой фреймворк, я задумался на эту тему. Я использую шаблонизатор – самый, что ни на есть простой – xtemplate (xtpl.sourceforge.net). Но могла ли моя система существовать без него? Не могла бы. Архитектура системы построена так, что ей необходима некая прослойка, в которую можно отдать данные, которые выводит Фреймворк. Это один из способов выполнения его основной задачи – универсализации подходов, с целью облегчения разработки однотипных элементов.
Поскольку уже на уровне проектирования, для облегчения задач по выводу данных используется шаблонизатор, без него мне не обойтись. И, к сожалению, использование PHP в чистом виде, а так же «логических шаблонизаторов» вроде Smarty для системы неприемлемо, поскольку становится невозможным управлять выводом той же админки непосредственно из main-модуля системы, который изначально построен на управлении блоками вывода (и именно интерфейс работы с блоками мне и даёт шаблонизатор).
Разделение кода и оформления – ну, это уже просто побочное и приятное последствие основной задачи.
MVC. Этот подход по определению требует наличие прослойки работающей с шаблонами. Плюсы или минусы подхода, это тема для отдельного обсуждения – и здесь каждый волен решать сам. Но, опять же, разделение кода и оформления, скорее является последствием подхода, чем главной причиной выбора шаблонизатора.
Ну и, наконец, позиция людей, которые не используют MVC, и наработки которых построены так, что шаблонизатор как таковой не нужен (в т.ч. я сюда и отношу использование логических шаблонизаторов в «голом» виде). Здесь основной целью использования шаблонов, как правило, ставится отсутствие возможности поддаться соблазну, и начать использовать в шаблоне PHP так, как этого не следует делать (например, переносить в шаблон логику получения, а не вывода данных). Как видно – ни один из подходов не противоречит идее разделения кода и оформления. Но везде это является следствием изначально выбранного подхода.
Несколько раз я читал, уже ставшее едва ли не крылатым выражение, которое предписывается Ромику(фанату), о том, что «единственная цель использования шаблонов – это что бы для изменения дизайна не надо было лезть в код». Не ручаюсь за точность цитаты, поскольку не видел изначального оригинала (даже не могу быть уверен, что он такое говорил – просто рядом с такими фразами я видел его (с)).
Некоторые особо умные личности, сделали из этой фразы культ, и используют её, тупо копируя, но нисколько не пытаясь понять её смысл. А ведь это – всего лишь одна из немногих причин, по чему разработчик может использовать отдельный шаблонный движок. И нельзя эту причину ставить как единственный довод против шаблонных движков. Поскольку во многих случаях (но не во всех) – это одна из последних целей использования шаблонизатора. Так же, вспоминается статья на спектраторе, посвященная шаблонизаторам, где автор пытается показать, что PHP – сам по себе хороший шаблонизатор. Но опять же – проблема в том, что автор всего лишь выводит мысли, касаемые одного, конкретного подхода, ни слова не говоря про существующие архитектурные решения.
З.Ы. Вопроса здесь нет – это просто повод поразмыслить. И возможно поправить меня – если я где-то ошибаюсь.
Вот, тут возникли у меня некоторые мысли по поводу шаблонизаторов. Не знаю, правильно ли такие темы создавать в «для продвинутых», но, боюсь, в оффтопике тему очень быстро превратят в помойку, хотя возможно что то, что я напишу и есть помойка. Тогда переносите в оффтоп.
Так вот. На форумах постоянно мелькают споры, о том, хорошо или плохо – эти шаблоназаторы. При чем в обсуждении учавствуют, как правило сторонники трёх подоходов:
1. Сторонники шаблонов и специальных шаблонизаторов, руководствующиеся, в первую очередь, принципом разделения кода и оформления.
2. Сторонники сложных шаблонных движков, которые руководствуются принципом, что в шаблоне должно быть не только оформление в чистом виде, но и логика отображения. Сюда можно отнести, в т.ч. любителей MVC.
3. Противники шаблонных движков, считающие что отдельный шаблонизатор – лишнее звено благо PHP сам по себе является шаблонизатором.
Ну и все обсуждения между этими тремя группами в итоге заканчиваются флеймом, и ни до чего не доходят.
А я тут задумался вот над чем. Если посмотреть мануал по PHP, то самым первым что мы увидем, это раздел «Что такое PHP», в котором в первую очередь приводится как плюс то, что можно мешать HTML и PHP. При этом приводится пример, из-за которого любой новичек может начать писать код именно так, как нельзя писать – полностью смешивая в одну кучу всё – и данные и дизайн и оформление. Однако же любой более ли менее опытный PHP-шник прекрасно понимает, что да – это плюс языка, но далеко не самый важный.
Так вот и касаемо шаблонизаторов – является ли главной причиной их использования то, что шаблонизатор разделяет код и оформление? А может быть это всего-лишь «фишка», дополнительный плюс?
Очередной раз перерабатывая свой фреймворк, я задумался на эту тему. Я использую шаблонизатор – самый, что ни на есть простой – xtemplate (xtpl.sourceforge.net). Но могла ли моя система существовать без него? Не могла бы. Архитектура системы построена так, что ей необходима некая прослойка, в которую можно отдать данные, которые выводит Фреймворк. Это один из способов выполнения его основной задачи – универсализации подходов, с целью облегчения разработки однотипных элементов.
Поскольку уже на уровне проектирования, для облегчения задач по выводу данных используется шаблонизатор, без него мне не обойтись. И, к сожалению, использование PHP в чистом виде, а так же «логических шаблонизаторов» вроде Smarty для системы неприемлемо, поскольку становится невозможным управлять выводом той же админки непосредственно из main-модуля системы, который изначально построен на управлении блоками вывода (и именно интерфейс работы с блоками мне и даёт шаблонизатор).
Разделение кода и оформления – ну, это уже просто побочное и приятное последствие основной задачи.
MVC. Этот подход по определению требует наличие прослойки работающей с шаблонами. Плюсы или минусы подхода, это тема для отдельного обсуждения – и здесь каждый волен решать сам. Но, опять же, разделение кода и оформления, скорее является последствием подхода, чем главной причиной выбора шаблонизатора.
Ну и, наконец, позиция людей, которые не используют MVC, и наработки которых построены так, что шаблонизатор как таковой не нужен (в т.ч. я сюда и отношу использование логических шаблонизаторов в «голом» виде). Здесь основной целью использования шаблонов, как правило, ставится отсутствие возможности поддаться соблазну, и начать использовать в шаблоне PHP так, как этого не следует делать (например, переносить в шаблон логику получения, а не вывода данных). Как видно – ни один из подходов не противоречит идее разделения кода и оформления. Но везде это является следствием изначально выбранного подхода.
Несколько раз я читал, уже ставшее едва ли не крылатым выражение, которое предписывается Ромику(фанату), о том, что «единственная цель использования шаблонов – это что бы для изменения дизайна не надо было лезть в код». Не ручаюсь за точность цитаты, поскольку не видел изначального оригинала (даже не могу быть уверен, что он такое говорил – просто рядом с такими фразами я видел его (с)).
Некоторые особо умные личности, сделали из этой фразы культ, и используют её, тупо копируя, но нисколько не пытаясь понять её смысл. А ведь это – всего лишь одна из немногих причин, по чему разработчик может использовать отдельный шаблонный движок. И нельзя эту причину ставить как единственный довод против шаблонных движков. Поскольку во многих случаях (но не во всех) – это одна из последних целей использования шаблонизатора. Так же, вспоминается статья на спектраторе, посвященная шаблонизаторам, где автор пытается показать, что PHP – сам по себе хороший шаблонизатор. Но опять же – проблема в том, что автор всего лишь выводит мысли, касаемые одного, конкретного подхода, ни слова не говоря про существующие архитектурные решения.
З.Ы. Вопроса здесь нет – это просто повод поразмыслить. И возможно поправить меня – если я где-то ошибаюсь.