'

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

Понравилась презентация – покажи это...





Слайд 0

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


Слайд 1

Первый этап - понимание


Слайд 2

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


Слайд 3

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


Слайд 4

Пусть код описывает себя сам. Написание документации


Слайд 5

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


Слайд 6

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


Слайд 7

Статистическое исследование кода Скриптовые языки, поддерживающие 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);


Слайд 8

Статистическое исследование кода Скриптовые языки, поддерживающие 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


Слайд 9

Статистическое исследование кода XSL.


Слайд 10

Взлом «чёрных ящиков» Коммерческие отладчики. XMLSpy Debugger слежение за контекстом вычисление XPATH-выражений пошаговое выполнение XPATH-точки слежения и останова список вызванных шаблонов, включая встроенные


Слайд 11

Взлом «чёрных ящиков» xsltproc --verbose xsltCompilePattern : parsing 'page' xsltCompilePattern : parsed page, default priority 0.000000 added pattern : 'page' priority 0.000000 Found AVT href: {url} xsltCompilePattern : parsing 'test' xsltCompilePattern : parsed test, default priority 0.000000 added pattern : 'test' priority 0.000000 parsed 3 templates Resolving attribute sets references Registered 0 modules Creating sub-dictionary from stylesheet for transformation reusing transformation dict for output Registering global variables Registering global variables from xsltproc_test.xsl xsltProcessOneNode: applying template '/' for / xsltApplyOneTemplate: copy node html xsltApplyTemplates: select page xsltApplyTemplates: list of 1 nodes xsltProcessOneNode: applying template 'page' for page xsltApplyOneTemplate: copy node head xsltApplyOneTemplate: copy node title


Слайд 12

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


Слайд 13

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


Слайд 14

Восстановление исходного 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> Взлом «чёрных ящиков»


Слайд 15

Взлом «чёрных ящиков» Плагины к FireFox: Web Developer Live HTTP headers FireBug


Слайд 16

Второй этап – изменение/refactoring


Слайд 17

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


Слайд 18

Не жадничать… xsltproc --profile


Слайд 19

Не жадничать… XMLSpy Profiler. количество вызовов время работы с и без учёта времени выполнения вложенных инструкций время выполнения XPATH-выражений


Слайд 20

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


Слайд 21

Разделять и властвовать… 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>


Слайд 22

Разделять и властвовать… 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>


Слайд 23

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


Слайд 24

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


Слайд 25

Евгения Фирсова http://money.yandex.ru e-mail: saigo@yamoney.ru icq: 169866344


×

HTML:





Ссылка: