Работа с legacy-xsl-кодом Евгения Фирсова saigo@yamoney.ru презентация

Содержание


Презентации» Шаблоны, фоны презентаций» Работа с legacy-xsl-кодом Евгения Фирсова saigo@yamoney.ru
Работа с legacy-xsl-кодом Евгения Фирсова saigo@yamoney.ruПервый этап - пониманиеНаписание документации
 Не скатываемся в простое перечисление вызовов, шаблонов, переменных.
 ОписываемНаписание документации
 Комментировать код – рано:
 собираем документацию воедино
 не создаёмНаписание документации
 Пусть код описывает себя сам.Написание документации
 XSLDoc от Jeni Tennison (http://www.jenitennison.com/xslt/utilities)Статистическое исследование кода
 Коммерческие продукты с функциональностью рефакторинга:
 Microsoft Visual Studio
Статистическое исследование кода
 Скриптовые языки, поддерживающие regexp:
 open(InFile, "get_regexp.xsl") || die;
Статистическое исследование кода
 Скриптовые языки, поддерживающие DOM:
 xfile.setProperty "SelectionNamespaces", "xmlns:xsl='http://www.w3.org/1999/XSL/Transform'"
 setСтатистическое исследование кода
 XSL.Взлом «чёрных ящиков»Взлом «чёрных ящиков»
 xsltproc --verboseВзлом «чёрных ящиков»
 Текстовые маркеры.
 <xsl:template match="…">
 	…
 	***				  Взлом «чёрных ящиков»
 Восстановление исходного XML-документа по вызываемым шаблонам.
 <xsl:template match="vendors/vendor">
Взлом «чёрных ящиков»
 Восстановление исходного XML-документа по вызываемым шаблонам.
 <xsl:template match="logo">
Взлом «чёрных ящиков»
 Плагины к FireFox:
 Web Developer
 Live HTTP headers
Второй этап – изменение/refactoringНе жадничать…
 С каких частей проекта стоит начинать refactoring?
 с наиболееНе жадничать…
 xsltproc --profileНе жадничать…
 XMLSpy Profiler.Не играть с тенью…
 Пусть лучше работает плохо, чем не работаетРазделять и властвовать…
 XForms – изменение функциональности.
 <xsl:template match="xf:input[@role='years']" mode="element">
 	<select>
Разделять и властвовать…
 DocBook – расширение функциональности.
 <xsl:template match="emphasis">
 	<b><xsl:apply-templates/></b>
 </xsl:template>
Отделять ресурсы от кода…
 css;
 javascript, в той части, которая неОптимизировать xsl-код…
 Зачем?
 удобно
 быстро
 	продолжение в следующей серии…



Слайды и текст этой презентации
Слайд 1
Описание слайда:
Работа с legacy-xsl-кодом Евгения Фирсова saigo@yamoney.ru


Слайд 2
Описание слайда:
Первый этап - понимание

Слайд 3
Описание слайда:
Написание документации Не скатываемся в простое перечисление вызовов, шаблонов, переменных. Описываем логику, а не алгоритм (отвечаем на вопрос «зачем», а не «как»). Пишем не для себя, а для «того парня», который ничего о внутреннем устройстве проекта не знает.

Слайд 4
Описание слайда:
Написание документации Комментировать код – рано: собираем документацию воедино не создаём лишние ревизии

Слайд 5
Описание слайда:
Написание документации Пусть код описывает себя сам.

Слайд 6
Описание слайда:
Написание документации XSLDoc от Jeni Tennison (http://www.jenitennison.com/xslt/utilities)

Слайд 7
Описание слайда:
Статистическое исследование кода Коммерческие продукты с функциональностью рефакторинга: Microsoft Visual Studio IntelliJ IDEA Eclipse oXigen рефакторинг с использованием шаблонов автоматическое создание шаблонов переименование шаблонов и переменных

Слайд 8
Описание слайда:
Статистическое исследование кода Скриптовые языки, поддерживающие regexp: open(InFile, "get_regexp.xsl") || die; while ($line = <InFile>) { if ($line =~ /<xsl:template match="([\/\w]*)"(\smode="(\w*)")?>/) { $match = $1; $mode = $3 ne "" ? "with mode $3" : ""; print "we apply template $match $mode\n"; } } close (InFile);

Слайд 9
Описание слайда:
Статистическое исследование кода Скриптовые языки, поддерживающие DOM: xfile.setProperty "SelectionNamespaces", "xmlns:xsl='http://www.w3.org/1999/XSL/Transform'" set templates = xfile.selectNodes("//xsl:template") for each template in templates line = "" if template.getAttribute("match") > "" then line = "we apply template " & template.getAttribute("match") end if if template.getAttribute("mode") > "" then line = line & " with mode " & template.getAttribute("mode") end if WScript.Echo line next

Слайд 10
Описание слайда:
Статистическое исследование кода XSL.

Слайд 11
Описание слайда:
Взлом «чёрных ящиков»

Слайд 12
Описание слайда:
Взлом «чёрных ящиков» xsltproc --verbose

Слайд 13
Описание слайда:
Взлом «чёрных ящиков» Текстовые маркеры. <xsl:template match="…"> … *** <!-- шаблон вызван --> … <xsl:copy-of select="."/> <!-- узел, для которого вызван шаблон --> … <xsl:value-of select="name(.)"/> <!-- имя узла, для которого вызван шаблон --> … </xsl:template>

Слайд 14
Описание слайда:
Взлом «чёрных ящиков» Восстановление исходного XML-документа по вызываемым шаблонам. <xsl:template match="vendors/vendor"> <xsl:apply-templates select="logo"/> <xsl:apply-templates select="name"/> <xsl:apply-templates select="descr"/> </xsl:template>

Слайд 15
Описание слайда:
Взлом «чёрных ящиков» Восстановление исходного XML-документа по вызываемым шаблонам. <xsl:template match="logo"> <img src="/i/{text()}" alt="{../name}"/> </xsl:template> <xsl:template match="logo[../site]"> <a href="http://{../site}" target="_blank"><img src="/i/{text()}" alt="{../name}"/></a> </xsl:template>

Слайд 16
Описание слайда:
Взлом «чёрных ящиков» Плагины к FireFox: Web Developer Live HTTP headers FireBug

Слайд 17
Описание слайда:
Второй этап – изменение/refactoring

Слайд 18
Описание слайда:
Не жадничать… С каких частей проекта стоит начинать refactoring? с наиболее значимых в бизнес-плане частей; с наиболее сложных по реализации частей; с наиболее уязвимых частей.

Слайд 19
Описание слайда:
Не жадничать… xsltproc --profile

Слайд 20
Описание слайда:
Не жадничать… XMLSpy Profiler.

Слайд 21
Описание слайда:
Не играть с тенью… Пусть лучше работает плохо, чем не работает никак. Пусть медленно, но с меньшим количеством ошибок. Не называть точных сроков.

Слайд 22
Описание слайда:
Разделять и властвовать… XForms – изменение функциональности. <xsl:template match="xf:input[@role='years']" mode="element"> <select> <xsl:attribute name="name"><xsl:apply-templates select="@name|@bind|@ref“/></xsl:attribute> <xsl:apply-templates select="@*" mode="element"/> <xsl:apply-templates select="document('years.xml')/years/year"/> </select> </xsl:template> <xsl:template match="xf:input[@role='years']" mode="element"> <select> <xsl:attribute name="name"><xsl:apply-templates select="@name|@bind|@ref“/></xsl:attribute> <xsl:apply-templates select="@*" mode="element"/> <option value="{$current_year}"><xsl:value-of select="$current_year"/></option> <option value="{$current_year + 1}"><xsl:value-of select="$current_year + 1"/></option> </select> </xsl:template>

Слайд 23
Описание слайда:
Разделять и властвовать… DocBook – расширение функциональности. <xsl:template match="emphasis"> <b><xsl:apply-templates/></b> </xsl:template> <xsl:template match="emphasis[@role = 'italic']"> <i><xsl:apply-templates/></i> </xsl:template>

Слайд 24
Описание слайда:
Отделять ресурсы от кода… css; javascript, в той части, которая не зависит от xsl-кода; тексты, относящиеся к интерфейсу: многоязычность; удалённое редактирование; «быстрые» изменения.

Слайд 25
Описание слайда:
Оптимизировать xsl-код… Зачем? удобно быстро продолжение в следующей серии…

Слайд 26
Описание слайда:


Скачать презентацию на тему Работа с legacy-xsl-кодом Евгения Фирсова saigo@yamoney.ru можно ниже:

Похожие презентации