SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
SVARX:
фреймворк для семантической
валидации форм
Макс Ширшин
Руководитель группы разработки интерфейсов
Рекламных Технологий

Я.Субботник, Киев, 28 мая 2011
О клиентской валидации




2
3
Серверная валидация

• защита от случайных и намеренных ошибок

• не пропустить ошибку

• нет цели пояснить суть ошибки

• риск потери данных или контекста

• плюс перезагрузка — минус конверсия :-(



4
Клиентская валидация

• защита от случайных ошибок

• не перегружать страницу

• пояснить суть ошибки

• указать способ устранения

• повышаем конверсию :-)



5
Клиентская валидация
часто делается «на коленках»
    <form onsubmit=“if (!this.elements.email.value) return
    false; if (this.elements.firstname.value == „‟ ||
    this.elements.secondname.value == „‟) {alert(„Укажите имя
    и фамилию‟); return false}”>



    <script>
    $(function(){$(„form‟).eq(1).submit(function() {
      var eml = $(this).find(„input[name=email]‟).val();
      eml = $.trim(eml);
      var emlRe = /[wd]+[2,20]@[wd]+[2,20].w+[2,10]/;
      if (!emlRe.test(eml)) return false;
    });});
    </script>


6
Нужно найти
более универсальное решение




7
Решений для client-side
валидации не так много
HTML 5 Forms
• не кроссбраузерно

• только элементарные валидации

• правила — в вёрстке или в js

• сообщения об ошибках неясно где

• #fail :-(

8
Решений для client-side
валидации не так много
JavaScript libraries
• не предлагают отдельного формата описания
  правил
• не отделяют валидацию от отображения ошибок
• не умеют важного: препроцессинг, группы правил,
  условные правила, инверсия проверок,
  одноимённые элементы...
• jQuery Validation — хорошая альтернатива

9
По́том и кровью
выстраданные принципы:
• проверка может включать более одного поля

• валидация может зависеть от внешних условий

• тексты ошибок отделяем от самих правил

• правила неудобно хранить в вёрстке

• для валидации нужен препроцессинг

• нужен атомарный code reuse

10
Что такое SVARX?




11
SVARX — это…
Semantical VAlidation Rulesets in XML
Идеология работы с правилами валидации.

Мы описываем отдельно:

• Смысловые (семантические) правила

• Реализацию проверок

• Тексты ошибок (если нужно)

• Способ реакции на эти ошибки

12
SVARX — это…
 Semantical VAlidation Rulesets in XML




Мухи — отдельно      Котлеты — отдельно


 13
SVARX

• human-readable XML-формат

• связки and-or-not, условия if-then-else

• любые правила (built-in + user-defined)

• семантически описанный препроцессинг




14
И ещё...
...есть плагин для jQuery, который умеет:

• читать (парсить) SVARX-файлы

• валидировать веб-формы в соответствии
  со SVARX-правилами

• интегрировать любые способы показа ошибок*

• добавлять user-defined правила   *
* плагины второго уровня на основе API
15
Как устроен SVARX-формат




16
Общая структура
 <svarx>
    <preprocess>
       <!–- правила препроцессинга -->
    </preprocess>

    <validate>
       <!–- правила валидации -->
    </validate>
 </svarx>




17
Каркас типичного правила
 <svarx>
    <preprocess>
       <!–- правила препроцессинга -->
    </preprocess>

     <validate>
        <rule
           for=“имя поля формы”
           type=“тип валидации”
           onerror=“идентификатор ошибки”
           ... доп. атрибуты, специфичные для правила

       />

    </validate>
 </svarx>




18
Простой пример
 <preprocess>
     <rule for=“age” type=“parseint” />
 </preprocess>
 <validate>
      <rule
          for=“age” type=“required”
          onerror=“age_not_specified” />
      <rule
          for=“age” type=“range”
              min=“14”
              max=“99”
          onerror=“age_incorrect” />
 </validate>




19
Кумулятивное правило
 <block logic=“and” onerror=“epic_fail”>

     <rule for=“user_email” type=“email” />
     <rule for=“age” type=“required” />
     <rule for=“age” type=“range”
           min=“14”
           max=“99” />

 </block>




20
Многоэлементное правило
 <rule type=“eq” comparison=“string”
       onerror=“fail”>
     <!–- сравниваем 2 значения -->
     <el name=“password1” />
     <el name=“password2” />

     <!–- опционально можем переопределять
          элемент, который будет target‟ом
          svarx-ошибки -->
     <errtarget name=“password1” />
 </rule>




21
Условные проверки
 <block logic=“if”>
     <!–- IF-условие -->
     <rule for=“agreed” type=“checked” />
     <!–- THEN-условие -->
     <block onerror=“need_email”>
          <rule for=“email” type=“required” />
          <rule for=“email” type=“email” />
     </block>
     <!–- ELSE-условие (опционально) -->
     <block onerror=“tel_number_required”>
          <rule for=“tel” type=“required” />
     </block>
 </block>



22
Ещё вкусности
 <!–- отрицание NOT -->
 <rule for=“address” type=“regexp”
       match=“[A-Z]”
      inverted=“yes”
      onerror=“cant_have_CAPS” />

 <!–- выборка из одноимѐнных элементов -->
 <rule for=“address” type=“email”
      item=“0”
      onerror=“fail” />




23
Важные договорённости
• пустые элементы дают TRUE на любой проверке...

• ...кроме правила required

• несуществующие элементы дают TRUE на любой
  проверке

• условные проверки от несуществующих элементов
  пропускаются целиком (IF-THEN-ELSE)

• ...кроме случая, когда мы явно укажем обратное
  failifnull=“yes”

24
SVARX и JavaScript




25
Архитектура SVARX на клиенте
       SVARX XML
       Ajax

     jQuery plugin          Форма
       Данные об ошибках

     Visualization plugin


26
Подключение на проект
 <script type=“text/javascript”
   src=“jquery.svarx.js”></script>
 <script type=“text/javascript”
   src=“svarx.methods.messages.js”></script>
 <script type=“text/javascript”>
 $(function() {
   $(„form‟).svarx({
       svarxURL: „/validation/svarx.xml‟,
       bindTo: „submit‟,
       immutable: true
   });
 });
 </script>

27
Что такое «плагин визуализации»?
 $.fn.svarx.methods.messages = {
    before: function(e) {},
    after: function(e, result, eType) {
       if (!result && eType == „submit‟) {
          e.preventDefault();
       }
    },
    error: function(e, id) {
       alert(„Error „
          + id
          + „ at element „
          + e.target.name);
    }
 };

28
Что мы с этого имеем?




29
Профит
• set it and forget it

• перестаём писать JS-валидацию на коленках

• порою — вообще перестаём писать JS-валидацию

• все знания о валидации в одном файле

• правим отображение ошибок независимо от
  правил




30
Где попробовать
Документация + последние версии:

https://github.com/ingdir/svarx



Использование в боевых условиях :

http://sprav.yandex.ru/

http://passport.yandex.ru/


31
To Do
• нет асинхронных проверок

• нет условий, не зависящих от состояния формы

• XML — not the way to go?

• скорость

• нет «компиляции» SVARX XML в JS-код

• мало syntax sugar внутри самого формата


32
Вопросы?




33
Макс Ширшин
Руководитель группы разработки
интерфейсов Рекламных Технологий

ingdir@yandex-team.ru

Weitere ähnliche Inhalte

Was ist angesagt?

Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikovyaevents
 
Средства разработки web приложений (Web frameworks)
Средства разработки web приложений
(Web frameworks)Средства разработки web приложений
(Web frameworks)
Средства разработки web приложений (Web frameworks)Fedor Malyshkin
 
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12HappyDev
 
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evroneit-people
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionМихаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionAlbina Tiupa
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionAlbina Tiupa
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов2ГИС Технологии
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейPaul Stashevsky
 
Лучший frontend-фреймворк, и почему вы его не хотите
Лучший frontend-фреймворк, и почему вы его не хотитеЛучший frontend-фреймворк, и почему вы его не хотите
Лучший frontend-фреймворк, и почему вы его не хотитеCodeFest
 
Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"Fwdays
 
16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAX16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAXRoman Brovko
 
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_schoolITmozg
 
всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта  всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта Olga Pirozhenko
 
Артем Маркушев — HTML и CSS по кирпичикам. Детали.
Артем Маркушев — HTML и CSS по кирпичикам. Детали.Артем Маркушев — HTML и CSS по кирпичикам. Детали.
Артем Маркушев — HTML и CSS по кирпичикам. Детали.DataArt
 
Codeception UATestingDays
Codeception UATestingDaysCodeception UATestingDays
Codeception UATestingDaysdavertmik
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CYandex
 

Was ist angesagt? (19)

Js templating stepan_reznikov
Js templating stepan_reznikovJs templating stepan_reznikov
Js templating stepan_reznikov
 
Being SOLID
Being SOLIDBeing SOLID
Being SOLID
 
Средства разработки web приложений (Web frameworks)
Средства разработки web приложений
(Web frameworks)Средства разработки web приложений
(Web frameworks)
Средства разработки web приложений (Web frameworks)
 
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
Артём Поликарпов - Фоторама - простая и мощная галерея на JS | Happydev'12
 
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
"VUE.JS как реакт с человеческим лицом" Дулецкий Вольдэмар, Evrone
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionМихаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с Codeception
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с Codeception
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
 
Лучший frontend-фреймворк, и почему вы его не хотите
Лучший frontend-фреймворк, и почему вы его не хотитеЛучший frontend-фреймворк, и почему вы его не хотите
Лучший frontend-фреймворк, и почему вы его не хотите
 
Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"Svyatoslav Login "360 View of XSS"
Svyatoslav Login "360 View of XSS"
 
16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAX16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAX
 
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_school
 
Securing Rails Applications
Securing Rails ApplicationsSecuring Rails Applications
Securing Rails Applications
 
всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта  всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта
 
Артем Маркушев — HTML и CSS по кирпичикам. Детали.
Артем Маркушев — HTML и CSS по кирпичикам. Детали.Артем Маркушев — HTML и CSS по кирпичикам. Детали.
Артем Маркушев — HTML и CSS по кирпичикам. Детали.
 
CodeFest dirty facts about AngularJS
CodeFest dirty facts about AngularJSCodeFest dirty facts about AngularJS
CodeFest dirty facts about AngularJS
 
Codeception UATestingDays
Codeception UATestingDaysCodeception UATestingDays
Codeception UATestingDays
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
 

Andere mochten auch

Emissionsberäkning för vägtransporter
Emissionsberäkning för vägtransporterEmissionsberäkning för vägtransporter
Emissionsberäkning för vägtransporterPer Olof Arnäs
 
Your Membership Organization: Does It Provide Value?
Your Membership Organization: Does It Provide Value?Your Membership Organization: Does It Provide Value?
Your Membership Organization: Does It Provide Value?StarChapter
 
Terminator Tintin och teleportering - Vetenskapsfestivalen 2013
Terminator Tintin och teleportering - Vetenskapsfestivalen 2013Terminator Tintin och teleportering - Vetenskapsfestivalen 2013
Terminator Tintin och teleportering - Vetenskapsfestivalen 2013Per Olof Arnäs
 
About Market America
About Market AmericaAbout Market America
About Market Americamarketamr
 
Unsolved problems in freight transport - climbing the three mountaintops of r...
Unsolved problems in freight transport - climbing the three mountaintops of r...Unsolved problems in freight transport - climbing the three mountaintops of r...
Unsolved problems in freight transport - climbing the three mountaintops of r...Per Olof Arnäs
 

Andere mochten auch (6)

windward5
windward5windward5
windward5
 
Emissionsberäkning för vägtransporter
Emissionsberäkning för vägtransporterEmissionsberäkning för vägtransporter
Emissionsberäkning för vägtransporter
 
Your Membership Organization: Does It Provide Value?
Your Membership Organization: Does It Provide Value?Your Membership Organization: Does It Provide Value?
Your Membership Organization: Does It Provide Value?
 
Terminator Tintin och teleportering - Vetenskapsfestivalen 2013
Terminator Tintin och teleportering - Vetenskapsfestivalen 2013Terminator Tintin och teleportering - Vetenskapsfestivalen 2013
Terminator Tintin och teleportering - Vetenskapsfestivalen 2013
 
About Market America
About Market AmericaAbout Market America
About Market America
 
Unsolved problems in freight transport - climbing the three mountaintops of r...
Unsolved problems in freight transport - climbing the three mountaintops of r...Unsolved problems in freight transport - climbing the three mountaintops of r...
Unsolved problems in freight transport - climbing the three mountaintops of r...
 

Ähnlich wie Maksim Shirshin

PHP Tricks
PHP TricksPHP Tricks
PHP TricksBlackFan
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPAEugene Abrosimov
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьMoscow.pm
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиZestranec
 
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»Yandex
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15MoscowJS
 
Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"Yandex
 
Как выглядит современный фронтенд
Как выглядит современный фронтендКак выглядит современный фронтенд
Как выглядит современный фронтендTimophy Chaptykov
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиSQALab
 
Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"
Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"
Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"Yandex
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнDevDay
 
Регрессионное тестирование верстки
Регрессионное тестирование версткиРегрессионное тестирование верстки
Регрессионное тестирование версткиTalks&Works
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингTimophy Chaptykov
 
Yii2
Yii2Yii2
Yii2Noveo
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Ontico
 
Как мы документируем программные интерфейсы. YaC 2014
Как мы документируем программные интерфейсы. YaC 2014Как мы документируем программные интерфейсы. YaC 2014
Как мы документируем программные интерфейсы. YaC 2014Yandex
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полнойОмские ИТ-субботники
 
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17MoscowJS
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 

Ähnlich wie Maksim Shirshin (20)

PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
Опыт разработки эффективного SPA
Опыт разработки эффективного SPAОпыт разработки эффективного SPA
Опыт разработки эффективного SPA
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
 
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
 
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15"CommonJS для браузера", Антон Шувалов, MoscowJS 15
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
 
Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"Степан Резников "Шаблонизация на клиенте"
Степан Резников "Шаблонизация на клиенте"
 
Как выглядит современный фронтенд
Как выглядит современный фронтендКак выглядит современный фронтенд
Как выглядит современный фронтенд
 
Тестирование программных фильтров безопасности
Тестирование программных фильтров безопасностиТестирование программных фильтров безопасности
Тестирование программных фильтров безопасности
 
Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"
Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"
Алексей Байтин, Алексей Осипенко "Проверка правописания в веб-приложениях"
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-Онлайн
 
Регрессионное тестирование верстки
Регрессионное тестирование версткиРегрессионное тестирование верстки
Регрессионное тестирование верстки
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендерингReact со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендеринг
 
Yii2
Yii2Yii2
Yii2
 
Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)Тестируй это / Виктор Русакович (GP Solutions)
Тестируй это / Виктор Русакович (GP Solutions)
 
Как мы документируем программные интерфейсы. YaC 2014
Как мы документируем программные интерфейсы. YaC 2014Как мы документируем программные интерфейсы. YaC 2014
Как мы документируем программные интерфейсы. YaC 2014
 
Scorex framework
Scorex frameworkScorex framework
Scorex framework
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
"Ractive.js — реактивные усы!" Ефим Соловьев, MoscowJS 17
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 

Mehr von yaevents

Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...yaevents
 
Тема для WordPress в БЭМ. Владимир Гриненко, Яндекс
Тема для WordPress в БЭМ. Владимир Гриненко, ЯндексТема для WordPress в БЭМ. Владимир Гриненко, Яндекс
Тема для WordPress в БЭМ. Владимир Гриненко, Яндексyaevents
 
Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...
Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...
Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...yaevents
 
i-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндекс
i-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндексi-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндекс
i-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндексyaevents
 
Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...
Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...
Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...yaevents
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...yaevents
 
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...yaevents
 
Мониторинг со всех сторон. Алексей Симаков, Яндекс
Мониторинг со всех сторон. Алексей Симаков, ЯндексМониторинг со всех сторон. Алексей Симаков, Яндекс
Мониторинг со всех сторон. Алексей Симаков, Яндексyaevents
 
Истории про разработку сайтов. Сергей Бережной, Яндекс
Истории про разработку сайтов. Сергей Бережной, ЯндексИстории про разработку сайтов. Сергей Бережной, Яндекс
Истории про разработку сайтов. Сергей Бережной, Яндексyaevents
 
Разработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, ShturmannРазработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, Shturmannyaevents
 
Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...
Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...
Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...yaevents
 
Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...
Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...
Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...yaevents
 
Сканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, Яндекс
Сканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, ЯндексСканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, Яндекс
Сканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, Яндексyaevents
 
Масштабируемость Hadoop в Facebook. Дмитрий Мольков, Facebook
Масштабируемость Hadoop в Facebook. Дмитрий Мольков, FacebookМасштабируемость Hadoop в Facebook. Дмитрий Мольков, Facebook
Масштабируемость Hadoop в Facebook. Дмитрий Мольков, Facebookyaevents
 
Контроль зверей: инструменты для управления и мониторинга распределенных сист...
Контроль зверей: инструменты для управления и мониторинга распределенных сист...Контроль зверей: инструменты для управления и мониторинга распределенных сист...
Контроль зверей: инструменты для управления и мониторинга распределенных сист...yaevents
 
Юнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, GoogleЮнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, Googleyaevents
 
C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...
C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...
C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...yaevents
 
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...yaevents
 
В поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, НигмаВ поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, Нигмаyaevents
 
Using classifiers to compute similarities between face images. Prof. Lior Wol...
Using classifiers to compute similarities between face images. Prof. Lior Wol...Using classifiers to compute similarities between face images. Prof. Lior Wol...
Using classifiers to compute similarities between face images. Prof. Lior Wol...yaevents
 

Mehr von yaevents (20)

Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
Как научить роботов тестировать веб-интерфейсы. Артем Ерошенко, Илья Кацев, Я...
 
Тема для WordPress в БЭМ. Владимир Гриненко, Яндекс
Тема для WordPress в БЭМ. Владимир Гриненко, ЯндексТема для WordPress в БЭМ. Владимир Гриненко, Яндекс
Тема для WordPress в БЭМ. Владимир Гриненко, Яндекс
 
Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...
Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...
Построение сложносоставных блоков в шаблонизаторе bemhtml. Сергей Бережной, Я...
 
i-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндекс
i-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндексi-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндекс
i-bem.js: JavaScript в БЭМ-терминах. Елена Глухова, Варвара Степанова, Яндекс
 
Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...
Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...
Дом из готовых кирпичей. Библиотека блоков, тюнинг, инструменты. Елена Глухов...
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
 
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...
Администрирование небольших сервисов или один за всех и 100 на одного. Роман ...
 
Мониторинг со всех сторон. Алексей Симаков, Яндекс
Мониторинг со всех сторон. Алексей Симаков, ЯндексМониторинг со всех сторон. Алексей Симаков, Яндекс
Мониторинг со всех сторон. Алексей Симаков, Яндекс
 
Истории про разработку сайтов. Сергей Бережной, Яндекс
Истории про разработку сайтов. Сергей Бережной, ЯндексИстории про разработку сайтов. Сергей Бережной, Яндекс
Истории про разработку сайтов. Сергей Бережной, Яндекс
 
Разработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, ShturmannРазработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, Shturmann
 
Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...
Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...
Кросс-платформенная разработка под мобильные устройства. Дмитрий Жестилевский...
 
Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...
Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...
Сложнейшие техники, применяемые буткитами и полиморфными вирусами. Вячеслав З...
 
Сканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, Яндекс
Сканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, ЯндексСканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, Яндекс
Сканирование уязвимостей со вкусом Яндекса. Тарас Иващенко, Яндекс
 
Масштабируемость Hadoop в Facebook. Дмитрий Мольков, Facebook
Масштабируемость Hadoop в Facebook. Дмитрий Мольков, FacebookМасштабируемость Hadoop в Facebook. Дмитрий Мольков, Facebook
Масштабируемость Hadoop в Facebook. Дмитрий Мольков, Facebook
 
Контроль зверей: инструменты для управления и мониторинга распределенных сист...
Контроль зверей: инструменты для управления и мониторинга распределенных сист...Контроль зверей: инструменты для управления и мониторинга распределенных сист...
Контроль зверей: инструменты для управления и мониторинга распределенных сист...
 
Юнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, GoogleЮнит-тестирование и Google Mock. Влад Лосев, Google
Юнит-тестирование и Google Mock. Влад Лосев, Google
 
C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...
C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...
C++11 (formerly known as C++0x) is the new C++ language standard. Dave Abraha...
 
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
Зачем обычному программисту знать языки, на которых почти никто не пишет. Але...
 
В поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, НигмаВ поисках математики. Михаил Денисенко, Нигма
В поисках математики. Михаил Денисенко, Нигма
 
Using classifiers to compute similarities between face images. Prof. Lior Wol...
Using classifiers to compute similarities between face images. Prof. Lior Wol...Using classifiers to compute similarities between face images. Prof. Lior Wol...
Using classifiers to compute similarities between face images. Prof. Lior Wol...
 

Maksim Shirshin

  • 1. SVARX: фреймворк для семантической валидации форм Макс Ширшин Руководитель группы разработки интерфейсов Рекламных Технологий Я.Субботник, Киев, 28 мая 2011
  • 3. 3
  • 4. Серверная валидация • защита от случайных и намеренных ошибок • не пропустить ошибку • нет цели пояснить суть ошибки • риск потери данных или контекста • плюс перезагрузка — минус конверсия :-( 4
  • 5. Клиентская валидация • защита от случайных ошибок • не перегружать страницу • пояснить суть ошибки • указать способ устранения • повышаем конверсию :-) 5
  • 6. Клиентская валидация часто делается «на коленках» <form onsubmit=“if (!this.elements.email.value) return false; if (this.elements.firstname.value == „‟ || this.elements.secondname.value == „‟) {alert(„Укажите имя и фамилию‟); return false}”> <script> $(function(){$(„form‟).eq(1).submit(function() { var eml = $(this).find(„input[name=email]‟).val(); eml = $.trim(eml); var emlRe = /[wd]+[2,20]@[wd]+[2,20].w+[2,10]/; if (!emlRe.test(eml)) return false; });}); </script> 6
  • 8. Решений для client-side валидации не так много HTML 5 Forms • не кроссбраузерно • только элементарные валидации • правила — в вёрстке или в js • сообщения об ошибках неясно где • #fail :-( 8
  • 9. Решений для client-side валидации не так много JavaScript libraries • не предлагают отдельного формата описания правил • не отделяют валидацию от отображения ошибок • не умеют важного: препроцессинг, группы правил, условные правила, инверсия проверок, одноимённые элементы... • jQuery Validation — хорошая альтернатива 9
  • 10. По́том и кровью выстраданные принципы: • проверка может включать более одного поля • валидация может зависеть от внешних условий • тексты ошибок отделяем от самих правил • правила неудобно хранить в вёрстке • для валидации нужен препроцессинг • нужен атомарный code reuse 10
  • 12. SVARX — это… Semantical VAlidation Rulesets in XML Идеология работы с правилами валидации. Мы описываем отдельно: • Смысловые (семантические) правила • Реализацию проверок • Тексты ошибок (если нужно) • Способ реакции на эти ошибки 12
  • 13. SVARX — это… Semantical VAlidation Rulesets in XML Мухи — отдельно Котлеты — отдельно 13
  • 14. SVARX • human-readable XML-формат • связки and-or-not, условия if-then-else • любые правила (built-in + user-defined) • семантически описанный препроцессинг 14
  • 15. И ещё... ...есть плагин для jQuery, который умеет: • читать (парсить) SVARX-файлы • валидировать веб-формы в соответствии со SVARX-правилами • интегрировать любые способы показа ошибок* • добавлять user-defined правила * * плагины второго уровня на основе API 15
  • 17. Общая структура <svarx> <preprocess> <!–- правила препроцессинга --> </preprocess> <validate> <!–- правила валидации --> </validate> </svarx> 17
  • 18. Каркас типичного правила <svarx> <preprocess> <!–- правила препроцессинга --> </preprocess> <validate> <rule for=“имя поля формы” type=“тип валидации” onerror=“идентификатор ошибки” ... доп. атрибуты, специфичные для правила /> </validate> </svarx> 18
  • 19. Простой пример <preprocess> <rule for=“age” type=“parseint” /> </preprocess> <validate> <rule for=“age” type=“required” onerror=“age_not_specified” /> <rule for=“age” type=“range” min=“14” max=“99” onerror=“age_incorrect” /> </validate> 19
  • 20. Кумулятивное правило <block logic=“and” onerror=“epic_fail”> <rule for=“user_email” type=“email” /> <rule for=“age” type=“required” /> <rule for=“age” type=“range” min=“14” max=“99” /> </block> 20
  • 21. Многоэлементное правило <rule type=“eq” comparison=“string” onerror=“fail”> <!–- сравниваем 2 значения --> <el name=“password1” /> <el name=“password2” /> <!–- опционально можем переопределять элемент, который будет target‟ом svarx-ошибки --> <errtarget name=“password1” /> </rule> 21
  • 22. Условные проверки <block logic=“if”> <!–- IF-условие --> <rule for=“agreed” type=“checked” /> <!–- THEN-условие --> <block onerror=“need_email”> <rule for=“email” type=“required” /> <rule for=“email” type=“email” /> </block> <!–- ELSE-условие (опционально) --> <block onerror=“tel_number_required”> <rule for=“tel” type=“required” /> </block> </block> 22
  • 23. Ещё вкусности <!–- отрицание NOT --> <rule for=“address” type=“regexp” match=“[A-Z]” inverted=“yes” onerror=“cant_have_CAPS” /> <!–- выборка из одноимѐнных элементов --> <rule for=“address” type=“email” item=“0” onerror=“fail” /> 23
  • 24. Важные договорённости • пустые элементы дают TRUE на любой проверке... • ...кроме правила required • несуществующие элементы дают TRUE на любой проверке • условные проверки от несуществующих элементов пропускаются целиком (IF-THEN-ELSE) • ...кроме случая, когда мы явно укажем обратное failifnull=“yes” 24
  • 26. Архитектура SVARX на клиенте SVARX XML Ajax jQuery plugin Форма Данные об ошибках Visualization plugin 26
  • 27. Подключение на проект <script type=“text/javascript” src=“jquery.svarx.js”></script> <script type=“text/javascript” src=“svarx.methods.messages.js”></script> <script type=“text/javascript”> $(function() { $(„form‟).svarx({ svarxURL: „/validation/svarx.xml‟, bindTo: „submit‟, immutable: true }); }); </script> 27
  • 28. Что такое «плагин визуализации»? $.fn.svarx.methods.messages = { before: function(e) {}, after: function(e, result, eType) { if (!result && eType == „submit‟) { e.preventDefault(); } }, error: function(e, id) { alert(„Error „ + id + „ at element „ + e.target.name); } }; 28
  • 29. Что мы с этого имеем? 29
  • 30. Профит • set it and forget it • перестаём писать JS-валидацию на коленках • порою — вообще перестаём писать JS-валидацию • все знания о валидации в одном файле • правим отображение ошибок независимо от правил 30
  • 31. Где попробовать Документация + последние версии: https://github.com/ingdir/svarx Использование в боевых условиях : http://sprav.yandex.ru/ http://passport.yandex.ru/ 31
  • 32. To Do • нет асинхронных проверок • нет условий, не зависящих от состояния формы • XML — not the way to go? • скорость • нет «компиляции» SVARX XML в JS-код • мало syntax sugar внутри самого формата 32
  • 34. Макс Ширшин Руководитель группы разработки интерфейсов Рекламных Технологий ingdir@yandex-team.ru