IML – как это работает ? 1

Iml, как это работает

Введение

Неоднократно в переписка и дискуссиях по IML, я встречал вопросы о генерируемом результирующем коде, сложной разметке и других проблемах, которые присущи интерпретаторам, но это все основано на доводах о том, как работает IML. По этой причине, я решил рассказать, не только, как использовать IML, но и том, как он устроен. Очевидно, что очень сложно объяснить в двух словах то как работает инструмент, который разрабатывался как универсальное решение для написания проектов в течении нескольких лет и поэтому была написана целая статья.

Ни кто ни чего не генерирует

Для начало надо понимать, что IML не интерпретатор, он только похож на него по замыслу, то есть визуально может показаться , что конструкции C# кода, строят JavaScript, но это не так. Сервер используется только для формирования  данных, применяя разработанный синтаксис (IML) на языке C# и сохраняет сформированные данные в dom element, в html attribute, далее все выполняется на стороне клиента. Для того, что бы понять, как это работает более детально, я приведу IML сценарий, на основе которого, мы изучим работу ядра библиотеки IncFramework.

Теперь посмотрим  основные аспекты работы ядра IML, изображенные на схеме:

Проанализируем каждый блок более детально

  1. C# DSL – на данном этапе  мы описываем поведение элемента и формируем данные, используя готовы конструкции IML, если смотреть по примеру, то это до вызова метода AsHtmlAttributes().
  2. To Html Attribute – теперь мы должны поместить полученный RouteValueDictionary после вызова AsHtmlAttributes в html element, можно сделать это используя ToTag ( в примере мы делаем ToDiv ), который создает указанный тег и помещает все значения из RouteValueDictionary в его атрибуты. Замечу что ToDiv, ToLink, ToI и другие являются именованной версией ToTag и сторонние разработчики могут без труда дописывать свои версии.
  3. Render View – asp.net mvc выполняет код View и возвращает сформированный html. На этом этапе заканчивается работа серверной стороны, то есть серверный код принимает минимальное участие в работе IML, по большей части это “красивый” синтаксис и типизация.
  4. Document Ready –  ссылка.
  5. Incoding Engine  – после того, как документ готов и все html элементы загружены, запускается  “движок”, который проверяет dom на наличие элементов с  incoding attributes. Важно то, что Incoding Engine будет наблюдать и дальше за тем, когда на странице появляются ( после загрузки по ajax ) новые html элементы.
  6. Parse – Все элементы, которые содержат incoding attribute, пропускаются через parse.
  7. Convert  json to Executables classes on JS – получаем значение incoding attribute в виде json и на основе значений создаем набор (массив) Executables классов на языке JavaScript, если смотреть по примеру, то построится 6 Executable, почему не 5, дело в том, что AjaxGet тоже является Executable.
  8. Registry executable to Runner – перебираем по очереди каждый Executable, который регистрируем в Runner.
  9. Store runner on dom element – сохраняем Runner в dom элемент.
  10. Bind to dom element – делаем bind  на элемент, в примере мы указали, что bind делать на событие InitIncoding.
  11. Call runner when come bind – после наступления события, указанного в bind, запускаем Runner.

P.S. Если кто-то заинтересуется, то можно ознакомиться с исходными кодами

Vlad Kopachinsky

I am a Senior developer at Incoding Software in Russian Federation. I created the Incoding Framework for rapid development

More Posts - Website - Twitter - Facebook - LinkedIn

One comment on “IML – как это работает ?

  1. Krianaqfq 26.01.2014 Sun, 26 Jan 2014 14:49:19 +0000

    Спасибо, за хорошую статью! побольше бы таких сайтов как у Вас!

Leave a Reply