Xslt

1,532 views
1,511 views

Published on

* XSLT в качестве языка шаблонов.
* XML для передачи модели в MVC.
* ObjectXPathNavigator помогает совместить типизированные модели и XML.
* Внедряем ASPX веб-формы в MVC.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,532
On SlideShare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Xslt

  1. 1. Использование XSLT для разработки сайтов (на ASP.NET)<br />Андрей Майоров, BYTE-force<br />xor@byte-force.com <br />twitter.com/xorets<br />
  2. 2. Что нужно от языка шаблонов?<br />Задача – показывать данные<br />В виде HTML<br />И не только в HTML<br />Шаблон легко делается из HTML<br />Общие фрагменты выносятся в отдельные файлы<br />Работает быстро<br />Кроссплатформенный и стандартный<br />Все это —XSLT<br />
  3. 3. Уже готовый. С блэкджеком и ...<br />Сюда пишется заголовок слайда, также до 3 строк, не больше!<br />Это – контентная область слайда.<br />Желательно создавать новые слайды, дублируя (copy/paste) этот слайд в качестве образца, чтобы сохранить общую стилистику презентации. Также рекомендуется для набора текста использовать шрифт Trebuchet.<br />
  4. 4. Команды XSLT<br />stylesheet<br />transform<br />import <br />include <br />output <br />template <br />param<br />variable <br />copy <br />apply-imports <br />apply-templates <br />call-template <br />with-param<br />value-of <br />copy-of <br />choose <br />when <br />otherwise <br />if <br />for-each <br />sort <br />decimal-format <br />number <br />element <br />attribute <br />attribute-set<br />text <br />comment <br />processing-instruction <br />fallback<br />key <br />message<br />namespace-alias <br />strip-space <br />preserve-space <br />Всего 35 штук<br />
  5. 5. XSLT ~ функциональный язык<br />Декларативный язык: не 100% функциональный, но точно не императивный.<br />Нельзя писать как в императивном – получится плохо.<br />Правильный подход позволяет добиться невозможных в императивном языке вещей.<br />
  6. 6. Основные преимущества XSLT<br />Data driven<br />Именно данные, находящиеся наконвейере обработки, управляют всем процессом. <br />XSLT templates<br /><underpants /><br /><profit /><br />
  7. 7. Основные преимущества XSLT<br />Модульность<br />Программа на XSLT состоит из независимых шаблонов, отвечающих на разные входные данные.<br />underpants.xslt<br />3шаблона<br />xsl:include<br />plan.xslt<br />5 шаблонов<br />sox.xslt<br />2шаблона<br />xsl:include<br />
  8. 8. Основные преимущества XSLT<br />Наследование<br />Директива import позволяет устанавливать отношения, сходные с наследованием.<br />base.xslt<br />xsl:import<br />extension.xslt<br />
  9. 9. Demo<br />
  10. 10. Закрепление материала<br />xsl:import<br />Используйте для наследования <br /><xsl:apply-imports> - вызов базового шаблона<br /><xsl:apply-templates select=“.” mode=“…” /> - template method, вызов в базовом шаблоне.<br /><xsl:call-template name=“…”/> - вызывает шаблон, заданный последним.<br />
  11. 11. Закрепление материала<br />xsl:include<br />Используйте для подключения компонентов<br />Просто вставка одного файла внутрь другого<br />
  12. 12. Закрепление материала<br />xsl:apply-templates<br />Основной инструмент!<br />Отдает узлы в обработку – позволяет делать волшебные преобразования.<br />Использовать вместо: xsl:copy-of, xsl:for-each, xsl:choose.<br />XSLT templates<br />xsl:apply-templates<br /><underpants /><br /><profit /><br />
  13. 13. Закрепление материала<br />Работа с переменными<br />Можно только проинициализировать, менять значение нельзя.<br />Цикл с увеличением счетчика – только через рекурсивный вызов.<br />
  14. 14. Домашняя работа<br />XPath.<br />Функции XSLT и XPath.<br />EXSLT.<br />Поддержка в разных платформах.<br />
  15. 15. MVC в веб-разработке<br />Model-View-Controller.<br />Отделяет разработку UI от разработки бизнес-логики.<br />Члены команды работают параллельно:<br />Верстальщик делает интерфейс.<br />Серверный программист – контроллеры.<br />
  16. 16. В каком формате передавать данные между controller и view?<br />
  17. 17. Передавать типизированный объект – неудобно<br />Типизированный объект – это код, его еще надо написать.<br />Наполнить объект данными – опять нужен код. <br />Кто его напишет, когда еще нет бизнес-логики?<br />
  18. 18. Храним промежуточные данные в XML<br />Данные удобно прототипировать вручную. В простом текстовом редакторе. <br />Не нужно ждать готовности контроллера. Данные для тестов уже есть в XML-документе.<br />Этими данными можно тестировать и сам контроллер.<br />
  19. 19. Сделали прототип и пошли работать…<br /><poem><br /> <title>Руслан и Людмила</title><br /><rating>5</rating><br /><description>...</description><br /></poem><br />Верстальщик<br />Программист<br />
  20. 20. XML в веб-приложениях<br />В веб часть данных уже в HTML. Например, текст новостной статьи.<br />Взяв XHTML, можем объединить все данные в один XML-документ:<br />Сильно структурированные — поля объектов.<br />Слабо структурированные — данные от пользователя.<br />
  21. 21. Объединение слабо и сильно типизированных данных<br /><poemid=“156”><br /> <title>Руслан и Людмила</title><br /><rating>5</rating><br /><description><br />«Руслан и Людмила» — первая законченная поэма Александра Пушкина.<br /></description><br /></poem><br />
  22. 22. Критика XML в качестве модели<br />Бизнес-логике неудобно работать с XML.<br />Надо работать с типизированной моделью.<br />Вручную преобразовывать объект в XML – мартышкин труд.<br />XmlSerializerимеет свои ограничения. <br />
  23. 23. Возьмите ObjectXPathNavigator<br />Позволяет работать с графом объектов, как будто это XML-документ.<br />«Ленивый»<br />Совместим с XmlSerializer.<br />Расширяем.<br />
  24. 24. XsltViewдля ASP.NET MVC<br />Нужен<br />
  25. 25. Чем плох MvcContrib.XsltViewEngine?<br />Использованием специального объекта XsltViewData – нельзя сменить view, не меняя контроллер.<br />Не умеет преобразовывать модель в XML.<br />
  26. 26.
  27. 27. Формы в XSLT<br />
  28. 28. Сложности с формами<br />Формы задаются в двух местах:<br />В XSLT задаем HTML-форму<br />В модели – поля данных, со статусами валидации, сообщениями и др.<br />Возникает соблазн сделать «язык форм» на базе XML-модели.<br />Это сложное и громоздкое решение<br />В принципе, те же проблемы у ASP.NET MVC<br />
  29. 29. ASP.NET Web Forms:<br />Страшные<br />Очень громоздкая обработка запроса<br />Выдают избыточный, страшноватый маркап<br />Понятные<br />Разработка веб-форм в VS очень проста и интуитивно понятна<br />Хочется минимизировать страх, оставив только пользу<br />
  30. 30. Решение<br />Совмещаем оба подхода.<br />От веб-формы берем только поля ввода.<br />Весь дизайн прикладываем при помощи XSLT. <br />
  31. 31. Решение подробнее<br />Веб-форма производит xHTML.<br />xHTML=XML. Контроллер вставляет форму в модель.<br />View копирует код формы наружу, в нужное место страницы. <br />Browser. Post back. <br />Контроллер передает пост-бэки в ASPX-файл.<br />goto 1.<br />
  32. 32. Решение в картинках<br />Controller<br />ASPX form<br />Browser<br />Request<br />Request<br />Данные (xml)<br />Форма (xHTML)<br />Model<br />View<br />
  33. 33. Технические сложности<br />HttpServerUtility.Executeне дает доступа к полям формы.<br />Берем код Execute рефлектором.<br />Некоторые нужные части HttpContextи HttpResponseзакрыты. Используем reflection:<br />HttpContext.SetCurrentHandler<br />HttpContext.RestoreCurrentHandler<br />HttpContext.SwitchWriter<br />
  34. 34. Итоги<br />XSLT – мощный язык шаблонов<br />XML удобен в качестве модели в MVC<br />ObjectXPathNavigator позволяет типизированные модели<br />Примиряет с веб-формами<br />
  35. 35. Сюда пишется заголовок слайда, также до 3 строк, не больше!<br />Это – контентная область слайда.<br />Желательно создавать новые слайды, дублируя (copy/paste) этот слайд в качестве образца, чтобы сохранить общую стилистику презентации. Также рекомендуется для набора текста использовать шрифт Trebuchet.<br />General Hooker<br />
  36. 36. Спасибо за внимание!<br />Андрей Майоров, BYTE-force<br />xor@byte-force.com<br />twitter.com/xorets<br />blogs.byte-force.com/xor<br />

×