[PHPCONF 2009] Еще один великолепный миф или абстракция в шаблонах представления

голосую

  • За

    Голосов: 5 35,7%
  • Против

    Голосов: 8 57,1%
  • Укажу в топике

    Голосов: 1 7,1%

  • Всего проголосовало
    14
  • Опрос закрыт .

confguru

ExAdmin
Команда форума
[PHPCONF 2009] Еще один великолепный миф или абстракция в шаблонах представления

Еще один великолепный миф или абстракция в шаблонах представления

Полагаю, любой из нас желает, чтобы веб-проекты были максимально легкими в обслуживании, целостными, стабильными, масштабируемыми и нетребовательными к ресурсам. При этом мы хотим многомиллионную аудиторию пользователей и обогощенные интерфейсы пользователей. Одно из узких мест на этом пути - стыковка уровня представления данных и уровня сервисов. Когда на руках сотни килобайт xHTML статического прототипа и набор Flash/Flex/Silverlight приложений, жаждущих общения с серверной стороной, на ум приходят множество решений. Наиболее популярные из них – непосредственное использование PHP вьюверов и хелперов в шаблонах представления или же применение различных шаблонизаторов аля Smarty. В первом случае все замечтально относительно повторного использования, доступной гибкости в разработке и производительность на высоте. Однако не хватает абстракции – как бы замечательно не был спроектирован код шаблонов, все же это читается тяжелее, чем нотации языков пользовательского интерфейса. В случае шаблонизаторов – не та гибкость, не та производительность, да и абстракция логики относительна. А что если взять все лучшее с обоих подходов?

Итак, правило 1: разработчик волен использовать любые элементы, чтобы передать логику интерфейса в XML. В дальнейшем эти элементы будут преобразованы в DIV или же указанный тег HTML.

Правило 2: Шаблон содержит исключительно логику интерфейса, вся декорация вынесена в CSS. Это так в идеальном мире, в реальности мы имеем блоки HTML, предназначенные для декорации. Используем атрибут theme для связи логического элемента шаблона с декоратором.

Правило 3: Приправим разметку MVC. Динамический код, такой как, скажем, списки будет сформирован моделью и декорирован посредством вьювера. Используем атрибут controller для запроса соответствующего контроллера. Очевидно тот же контроллер должен быть запрошен, когда приходит AJAX запрос на обновление данного списка. Однако, учитывая характер запроса, ответ будет автоматически завернут в JSON. При запросе из Flash контроллер ответит на XML.

Что еще? Давайте сделаем доступными в шаблоне переменные среды платформы {Page.Content1}. Добавим локализацию заголовков и условия для элементов. Теперь осталось только обрабатывать элемент include, где может быть запрошен шаблон, PHP или HTML.

Вуаля, новый язык разметки готов. Встречайте LML (Layout Markup Languge). Однако если речь о языке, то нужен парсер, а парсер - это всегда плохо. Давайте не интерпретировать, а компилировать в PHP. В результате разработчик работает с абстрактной структурой документа, что после компиляции напоминает стандартный layout Zend Framework.



Дмитрий Шейко
Ведущий веб-разработчик
CRYTEK GmbH
 

AmdY

Пью пиво
Команда форума
как-то слишком туманно, мне почему-то кажется что это xslt, но по другому. а значит не так универсально?
 

slach

Новичок
У димы уже несколько раз были доклады, которые НИКТО толком не понял...

-~{}~ 26.08.09 09:19:

по моему интереснее и проще и быстрее чем концепции заложенные Blitz или CTPP не придумали еще
 

Alexandre

PHPПенсионер
по моему интереснее и проще и быстрее чем концепции заложенные Blitz или CTPP не придумали еще
Жень, у блица есть недостаток: его логика, в отличие от смарти и ему подобных построена на хелперах. А при достаточных их количествах в проектах чуть больше среднего он начинает тормозить на кэллбэках

fixxxer придумал нечто среднее, очень похожее на эту технологию: XML - шаблон обрабатывается через XSLT и строится (компилится) нативный PHP-шаблон. По замерам - быстрее, чем использование блица. Пусть Леша не обижается, его продукт активно используется в других частях проекта.

С CTPP не замеряли, но по замерам в первой версии он был тормознее блица.

я воздержался, думаю идея не нова, но интересна и поделиться ее нужно (на флип чарте например)
 

fixxxer

К.О.
Партнер клуба
Генерится как php, так и js код.

Говорить, что одно быстрее другого, некорректно вне контекста. В конкретном случае получается быстрее, т.к. используется куча хелперов. Собственно, решение было выбрано не даже из-за скорости (которая могла бы спокойно быть сопоставима, если реализовать по-человечески поддержку хелперов в blitz а не извращаться через __call), а из-за необходимости генерировать одновременно php и js-код из одного шаблона (т.е. один и тот же шаблон может использоваться и на сервере и на клиенте) и упрощения локализации (xpath на lexem-теги - много проще полноценного парсинга). Специфика проекта.

Xslt в качестве компилятора - просто потому что это проще, чем писать конечный автомат :) синтаксис исходных шаблонов - по сути blitz-конструкции, завернутые в xml.

Собственно сомневаюсь, что это извращение кому-то вне контекста одного данного проекта будет интересно %)

По докладу, честно говоря, нихрена не понял из тезисов о чем там речь :)
 

Alexandre

PHPПенсионер
По докладу, честно говоря, нихрена не понял из тезисов о чем там речь
как самому сделать новый эффективный шаблонизатор ;)
+ основы верстки

может если бы было написано более простыми фразами, то народ бы лучше воспринял.
 

confguru

ExAdmin
Команда форума
Доклад не влючен в программу..

P.S. Программа будем к вечеру
 
Сверху