На мой взгляд, с шаблонными двигателями, чем меньше, тем лучше. То есть вам нужно меньше функций, а не больше, чтобы обеспечить возможность повторного использования шаблонов.
Один шаблонизатор, который предоставляет только те функции, которые строго необходимы шаблонизатору, и не более StringTemplate . Это не то, что я лично использовал в производственной системе, но я планирую воспользоваться следующей возможностью.
Если вы хотите узнать больше об этом предмете / философии, прочитайте Обеспечение строгого разделения модельного представления в шаблонизаторах создателем StringTemplate.
Если вы читаете только один раздел в этой статье, прочитайте главу 7, которая включает в себя следующие правила, которые я стараюсь применять (даже при использовании чего-то вроде JSP, это возможно «слишком мощный» механизм):
- представление не может изменить модель либо путем непосредственного изменения модели
объекты данных или путем вызова методов на
модель, вызывающая побочные эффекты.
То есть шаблон может получить доступ к данным
из модели и вызывать методы, но
такие ссылки должны быть побочным эффектом
свободно. Это правило возникает частично
потому что ссылки на данные должны быть
порядок учета регистра. См. Раздел 7.1.
- представление не может выполнять вычисления на зависимых данных
значения , потому что вычисления могут
изменить в будущем, и они должны
быть аккуратно заключены в модель в
любой случай. Например, представление не может
рассчитать цены продажи книг как
«$ Цена * 0,90». Быть независимым от
модель, вид не может сделать
предположения о значении данных.
- представление не может сравнивать значения зависимых данных , но может проверить
свойства данных, таких как
наличие / отсутствие или длина
многозначное значение данных. Тесты как
$ bloodPressure <120 должен быть перемещен в
модель, как врачи хотели бы сохранить
снижение максимального систолического давления
на нас. Выражения в представлении должны быть
заменен на тест на наличие
значение, имитирующее логическое значение, такое как
$ bloodPressureOk! = null Вывод шаблона
может зависеть от данных модели и
вычисления, условные
должен быть рассчитан в модели. Четное
простые тесты, которые дают отрицательные значения
красный должен быть рассчитан в модели;
правильный уровень абстракции обычно
союзник что-то более высокого уровня, такого как
«Отдел Х теряет деньги». </li>
- представление не может делать предположения типа данных. Некоторые предположения типа
очевидно, когда представление предполагает данные
значение, например, дата, но больше
предположения тонкого типа: если
шаблон предполагает, что $ userID является
целое число, программист не может
измените это значение на нечисловое
в модели, не нарушая
шаблон. Это правило запрещает массив
индексирование, такое как colorCode [$ topic] и
$ name [$ ID] Вид далее не может
вызывать методы с аргументами, потому что
(статически или динамически) есть
предполагаемый тип аргумента, если только один
может гарантировать метод модели
просто относился к ним как к объектам.
К тому же графические дизайнеры не
программисты; ожидая, что они призовут
методы и знать, что передать
нереально.
- данные из модели не должны содержать информацию о дисплее или макете.
Модель не может пройти ни одного дисплея
информация для представления под видом
значения данных. Это включает в себя не прохождение
название шаблона для применения
другие значения данных.