Использование XSLT для разработки сайтов (на ASP.NET) Андрей Майоров, BYTE-force xor@byte-force.com twitter.com/xorets

Содержание

Слайд 2

Что нужно от языка шаблонов?

Задача – показывать данные
В виде HTML
И не только

Что нужно от языка шаблонов? Задача – показывать данные В виде HTML
в HTML
Шаблон легко делается из HTML
Общие фрагменты выносятся в отдельные файлы
Работает быстро
Кроссплатформенный и стандартный

Все это — XSLT

Слайд 3

Сюда пишется заголовок слайда, также до 3 строк, не больше!

Это – контентная

Сюда пишется заголовок слайда, также до 3 строк, не больше! Это –
область слайда.
Желательно создавать новые слайды, дублируя (copy/paste) этот слайд в качестве образца, чтобы сохранить общую стилистику презентации. Также рекомендуется для набора текста использовать шрифт Trebuchet.

Уже готовый. С блэкджеком и ...

Слайд 4

Команды XSLT

stylesheet
transform
import
include
output
template
param
variable
copy
apply-imports
apply-templates

Команды XSLT stylesheet transform import include output template param variable copy apply-imports

call-template
with-param
value-of
copy-of
choose
when
otherwise
if
for-each
sort
decimal-format
number
element
attribute
attribute-set
text
comment
processing-instruction
fallback
key
message
namespace-alias
strip-space
preserve-space
Всего 35 штук

Слайд 5

XSLT ~ функциональный язык

Декларативный язык: не 100% функциональный, но точно не императивный.
Нельзя

XSLT ~ функциональный язык Декларативный язык: не 100% функциональный, но точно не
писать как в императивном – получится плохо.
Правильный подход позволяет добиться невозможных в императивном языке вещей.

Слайд 6

Data driven

Именно данные, находящиеся на конвейере обработки, управляют всем процессом.

Основные преимущества

Data driven Именно данные, находящиеся на конвейере обработки, управляют всем процессом. Основные преимущества XSLT XSLT templates
XSLT



XSLT templates

Слайд 7

Модульность

Программа на XSLT состоит из независимых шаблонов, отвечающих на разные входные данные.

Основные

Модульность Программа на XSLT состоит из независимых шаблонов, отвечающих на разные входные
преимущества XSLT

plan.xslt
5 шаблонов

underpants.xslt
3 шаблона

sox.xslt
2 шаблона

xsl:include

xsl:include

Слайд 8

Наследование

Директива import позволяет устанавливать отношения, сходные с наследованием.

Основные преимущества XSLT

extension.xslt

base.xslt

xsl:import

Наследование Директива import позволяет устанавливать отношения, сходные с наследованием. Основные преимущества XSLT extension.xslt base.xslt xsl:import

Слайд 10

xsl:import

Используйте для наследования
- вызов базового шаблона
- template

xsl:import Используйте для наследования - вызов базового шаблона - template method, вызов
method, вызов в базовом шаблоне.
- вызывает шаблон, заданный последним.

Закрепление материала

Слайд 11

xsl:include

Используйте для подключения компонентов
Просто вставка одного файла внутрь другого

Закрепление материала

xsl:include Используйте для подключения компонентов Просто вставка одного файла внутрь другого Закрепление материала

Слайд 12

xsl:apply-templates

Основной инструмент!
Отдает узлы в обработку – позволяет делать волшебные преобразования.
Использовать вместо: xsl:copy-of,

xsl:apply-templates Основной инструмент! Отдает узлы в обработку – позволяет делать волшебные преобразования.
xsl:for-each, xsl:choose.



XSLT templates

xsl:apply-templates

Закрепление материала

Слайд 13

Работа с переменными

Можно только проинициализировать, менять значение нельзя.
Цикл с увеличением счетчика –

Работа с переменными Можно только проинициализировать, менять значение нельзя. Цикл с увеличением
только через рекурсивный вызов.

Закрепление материала

Слайд 14

Домашняя работа

XPath.
Функции XSLT и XPath.
EXSLT.
Поддержка в разных платформах.

Домашняя работа XPath. Функции XSLT и XPath. EXSLT. Поддержка в разных платформах.

Слайд 15

MVC в веб-разработке

Model-View-Controller.
Отделяет разработку UI от разработки бизнес-логики.
Члены команды работают параллельно:
Верстальщик делает

MVC в веб-разработке Model-View-Controller. Отделяет разработку UI от разработки бизнес-логики. Члены команды
интерфейс.
Серверный программист – контроллеры.

Слайд 16

В каком формате передавать данные между controller и view?

В каком формате передавать данные между controller и view?

Слайд 17

Передавать типизированный объект – неудобно

Типизированный объект – это код, его еще надо

Передавать типизированный объект – неудобно Типизированный объект – это код, его еще
написать.
Наполнить объект данными – опять нужен код.

Слайд 18

Храним промежуточные данные в XML

Данные удобно прототипировать вручную. В простом текстовом редакторе.

Храним промежуточные данные в XML Данные удобно прототипировать вручную. В простом текстовом

Не нужно ждать готовности контроллера. Данные для тестов уже есть в XML-документе.
Этими данными можно тестировать и сам контроллер.

Слайд 19

Сделали прототип и пошли работать…


Руслан и Людмила
5
...

Верстальщик

Программист

Сделали прототип и пошли работать… Руслан и Людмила 5 ... Верстальщик Программист

Слайд 20

XML в веб-приложениях

В веб часть данных уже в HTML. Например, текст новостной

XML в веб-приложениях В веб часть данных уже в HTML. Например, текст
статьи.
Взяв XHTML, можем объединить все данные в один XML-документ:
Сильно структурированные — поля объектов.
Слабо структурированные — данные от пользователя.

Слайд 21

Объединение слабо и сильно типизированных данных


Руслан и Людмила
5

«Руслан

Объединение слабо и сильно типизированных данных Руслан и Людмила 5 «Руслан и
и Людмила» — первая законченная поэма Александра Пушкина.


Слайд 22

Критика XML в качестве модели

Бизнес-логике неудобно работать с XML.
Надо работать с типизированной

Критика XML в качестве модели Бизнес-логике неудобно работать с XML. Надо работать
моделью.
Вручную преобразовывать объект в XML – мартышкин труд.
XmlSerializer имеет свои ограничения.

Слайд 23

Возьмите ObjectXPathNavigator

Позволяет работать с графом объектов, как будто это XML-документ.
«Ленивый»
Совместим с XmlSerializer.
Расширяем.

Возьмите ObjectXPathNavigator Позволяет работать с графом объектов, как будто это XML-документ. «Ленивый» Совместим с XmlSerializer. Расширяем.

Слайд 24

XsltView для ASP.NET MVC

Нужен

XsltView для ASP.NET MVC Нужен

Слайд 25

Чем плох MvcContrib.XsltViewEngine?

Использованием специального объекта XsltViewData – нельзя сменить view, не меняя

Чем плох MvcContrib.XsltViewEngine? Использованием специального объекта XsltViewData – нельзя сменить view, не
контроллер.
Не умеет преобразовывать модель в XML.

Слайд 27

Формы в XSLT

Формы в XSLT

Слайд 28

Сложности с формами

Формы задаются в двух местах:
В XSLT задаем HTML-форму
В модели –

Сложности с формами Формы задаются в двух местах: В XSLT задаем HTML-форму
поля данных, со статусами валидации, сообщениями и др.
Возникает соблазн сделать «язык форм» на базе XML-модели.
Это сложное и громоздкое решение
В принципе, те же проблемы у ASP.NET MVC

Слайд 29

ASP.NET Web Forms:

Страшные
Очень громоздкая обработка запроса
Выдают избыточный, страшноватый маркап
Понятные
Разработка веб-форм в VS

ASP.NET Web Forms: Страшные Очень громоздкая обработка запроса Выдают избыточный, страшноватый маркап
очень проста и интуитивно понятна
Хочется минимизировать страх, оставив только пользу

Слайд 30

Решение

Совмещаем оба подхода.
От веб-формы берем только поля ввода.
Весь дизайн прикладываем при помощи

Решение Совмещаем оба подхода. От веб-формы берем только поля ввода. Весь дизайн прикладываем при помощи XSLT.
XSLT.

Слайд 31

Решение подробнее

Веб-форма производит xHTML.
xHTML=XML. Контроллер вставляет форму в модель.
View копирует код формы

Решение подробнее Веб-форма производит xHTML. xHTML=XML. Контроллер вставляет форму в модель. View
наружу, в нужное место страницы.
Browser. Post back.
Контроллер передает пост-бэки в ASPX-файл.
goto 1.

Слайд 32

Решение в картинках

Форма (xHTML )

Controller

ASPX form

Model

View

Browser

Request

Request

Данные (xml)

Решение в картинках Форма (xHTML ) Controller ASPX form Model View Browser Request Request Данные (xml)

Слайд 33

Технические сложности

HttpServerUtility.Execute не дает доступа к полям формы.
Берем код Execute рефлектором.
Некоторые нужные

Технические сложности HttpServerUtility.Execute не дает доступа к полям формы. Берем код Execute
части HttpContext и HttpResponse закрыты. Используем reflection:
HttpContext.SetCurrentHandler
HttpContext.RestoreCurrentHandler
HttpContext.SwitchWriter

Слайд 34

Итоги

XSLT – мощный язык шаблонов
XML удобен в качестве модели в MVC
ObjectXPathNavigator позволяет

Итоги XSLT – мощный язык шаблонов XML удобен в качестве модели в
типизированные модели
Примиряет с веб-формами

Слайд 35

Сюда пишется заголовок слайда, также до 3 строк, не больше!

Это – контентная

Сюда пишется заголовок слайда, также до 3 строк, не больше! Это –
область слайда.
Желательно создавать новые слайды, дублируя (copy/paste) этот слайд в качестве образца, чтобы сохранить общую стилистику презентации. Также рекомендуется для набора текста использовать шрифт Trebuchet.

General Hooker

Имя файла: Использование-XSLT-для-разработки-сайтов-(на-ASP.NET)-Андрей-Майоров,-BYTE-force-xor@byte-force.com-twitter.com/xorets.pptx
Количество просмотров: 430
Количество скачиваний: 0