Представление с преобразованием в 2 этапа (XSLT)

OkyHb

Guest
Представление с преобразованием в 2 этапа (XSLT)

Работал ли кто-нить с данным паттерном? Если одноэтапное представление еще более мене логично, то 2-х этапное преобразование я совсем не могу понять.

Т.е. для чего нужен промежуточный screen layout? Что мешает сериализованные объекты домена подвергнуть трансформации в html в глобальном шаблоне?

Еще не понимаю, на каком этапе формировать те же ссылки? На 1-м или на 2-м. Я так понял, что на первом, т.к. нефиг дизайнеру париться.

Пожалуйста, те кто работал с этим паттерном, объясните что и как.
 

Orlis

Guest
ссылку на первоисточник своего "паттерна" дай...
 

Orlis

Guest
http://www.martinfowler.com/eaaCatalog/twoStepView.html ?

Так там имеется в виду, что ты в бизнес-логике генерируешь псевдокод (например, XML, 1й этап) вместо готового HTML, а потом все это пропускаешь через шаблонизатор (например, XSLT, 2й этап). Больше ничего.

Иногда XML действительно формируется в несколько этапов XSLT, это делается для простоты и наглядности каждого этапа, но никак не по причине Enterprise Application Architecture. :)

Все сказанное, конечно, ИМХО -- не нужно искать библейских откровений от теоретических работ.
 

OkyHb

Guest
В бизнес логике? Скорее всего в контроллере.
 

Orlis

Guest
выводом XML должен заниматься САМ ОБЪЕКТ бизнес-модели, в противном случае посредник-контроллер вынужден лезть во внутреннюю структуры Модели, что нарушает основной принцип инкапсуляции данных в ООП
 

OkyHb

Guest
Model : Адрес, Кастомер, Заказ. Есть метод ToXML.

Controller : допустим FrontController + Command.
Команда выбирает из DAL объекты модели предметной области. Сериализует их в XML. Строит логический экран. И вызывает метод свой Render, кот. применяет XSL трансформацию к логическому экрану и пишет их в Response.
 

Orlis

Guest
Главное, чтобы метод "toXML" был внутри Модели.

Окунь>
Тебя трудно понимать: применяешь кучу необщеприятых терминов без расшифровки. Вдруг "логический экран" какой-то появился :)

Хорошая архитектура всегда проста, это достигается за счет инкапсуляции деталей.

Лично я в веб-проектах применяю ведущие шаблоны -- команды на получение данных дает сам XSLT трансформатор в процессе преобразования custom tags.
 

OkyHb

Guest
> Главное, чтобы метод "toXML" был внутри Модели.
так и есть.
> Вдруг "логический экран" какой-то появился
Это есть xml который получается после 1-го этапа. :)

-~{}~ 03.03.05 22:10:

> генерируешь псевдокод (например, XML, 1й этап) вместо готового HTML

Ты имеешь в виду некий псевдо-html?
Так?:

На первом как я понял из сериализованных объектов домена делается модель представления, причем так, что допустим кастомер и заказы преобретают общий вид (например таблицы):

<grid css-class=".customer">
<row><cell>Alexander</cell></row>
<row><cell>My favourite address</cell>
</grid>

<grid css-class=".order">
<row><cell>Total order items: 5</cell></row>
</grid>

2-й этап:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="grid">
<table class="{@css-class}">
<xsl:apply-templates select="row"/>
</table>
</xsl:template>
<xsl:template match="row">
<tr>
<xsl:apply-templates select="cell"/>
</tr>
</xsl:template>
<xsl:template match="cell">
<td>
<xsl:value-of select="text()"/>
<xsl:apply-templates select="link"/>
<xsl:apply-templates select="grid"/>
</td>
</xsl:template>
<xsl:template match="link">
<a href="{@location}">
<xsl:value-of select="text()"/>
</a>
</xsl:template>
</xsl:stylesheet>

=> Можно изменить глобальный вид, редактируя XSL-файл 2-го этапа. Но если нужно отображать строки заказа в ячейках разным цветам, стиль назначать в XSL 1-го этапа.

-~{}~ 03.03.05 22:37:

Т.е. чтобы представить данные 2-х объектов в виде 2-х таблиц,
нужно на 1-м этапе создать представление (grid) и сделать таблицу html из него на 2-м этапе, то я не понимаю как сделать так, чтобы четные строки заказов представлялись в ячейках разного цвета. Если для таблицы и текста можно назначить стиль через CSS, то как сделать разный цвет ячеек? Делать другой элемент (TwoColorGrid)? Тогда нах. нужен этот 1-й этап?
 

Orlis

Guest
Мда... :(
ИМХО, не трогай пока XML и ООП вообще.
 

OkyHb

Guest
Что ты подразумаваешь подд данным постом? Идиотизм моих вопросов?

-~{}~ 04.03.05 23:52:

Короче понял все. Делается что-то наподобие своего HTML.

После внимательного прочтения главы об этом паттерне выяснилось: "существенно ограничивает возможности оформления веб-сайтов...". Дык естественно.

Вывод один: забить. TransformView рулит.
 
Сверху