Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Реальная кодогенерация с использованием T4-шабл...

CUSTIS
April 02, 2015

Реальная кодогенерация с использованием T4-шаблонов

Открытый семинар для студентов в компании CUSTIS (2 апреля 2015 года).
Лектор: Павел Музыка, технический лидер.

CUSTIS

April 02, 2015
Tweet

More Decks by CUSTIS

Other Decks in Programming

Transcript

  1. О себе  Окончил Калужский филиал МГТУ им. Н. Э.

    Баумана  В промышленной разработке с 2005 года  В CUSTIS c февраля 2012 года  Сертифицированный разработчик MS SQL, WinForms и WPF 2/57
  2. Вводная часть  Что такое кодогенерация  Что такое шаблоны

    T4  Другие макроязыки  Инструментальная поддержка 5/57
  3. Теоретическая часть  Как работает движок  Виды шаблонов 

    Структура и синтаксис шаблона  Переиспользование шаблонов  Подключение библиотек к шаблонам  Недостатки шаблонов 6/57
  4. Практическая часть  Задача  Связка T4 + MS SQL

     Интеграция с Enterprise Architect  Примеры реально автоматизируемых фич  Потенциал для развития 7/57
  5. Где я?  Что такое кодогенерация  Что такое шаблоны

    T4  Другие макроязыки  Инструментальная поддержка 8/57
  6. Примеры кодогенерации  Компиляторы языков высокого уровня  Шаблоны файлов

    и проектов в Visual Studio  Визуальный редактор в Visual Studio  Создание таблиц через мастер в SQL Server Management Studio  и много еще… 9/57
  7. Что такое кодогенерация? Wikipedia: Кодогенерация – часть процесса компиляции, когда

    специальная часть компилятора, кодогенератор, конвертирует синтаксически корректную программу в последовательность инструкций, которые могут выполняться на машине. 10/57
  8. Цели кодогенерации  Избавить от скучной рутинной работы  Уменьшить

    количество ошибок  Ускорить разработку  Позволяют не-программистам быть программистами (ведь можно писать сайты в Word!) 11/57
  9. Особенности написания генераторов  Читабельным должен быть код самого генератора

     Результат работы генератора необязательно должен быть читабельным  В результате кодогенерации могут дублироваться большие блоки кода 12/57
  10. Где я?  Что такое кодогенерация  Что такое шаблоны

    T4  Другие макроязыки  Инструментальная поддержка 13/57
  11. Шаблоны T4  T4 = Text Template Transformation Toolkit 

    Встроенный в Visual Studio (начиная с 2008) движок кодогенерации  Позволяет писать логику шаблона на C# или VB.NET  Позволяет генерировать любой код  Шаблоны могут быть переиспользуемыми (наследование, включение) 15/57
  12. Где я?  Что такое кодогенерация  Что такое шаблоны

    T4  Другие макроязыки  Инструментальная поддержка 16/57
  13. Другие макроязыки  T4 – это макроязык, встроенный в Visual

    Studio  Freemarker – движок шаблонов на Java  Макропроцессор M4 – создан Брайаном Керниганом и Денисом Ритчи  Система верстки TeX – создана Дональдом Кнутом  LaTeX – набор макрорасширений для TeX 17/57
  14. Где я?  Что такое кодогенерация  Что такое шаблоны

    T4  Другие макроязыки  Инструментальная поддержка 18/57
  15. Инструменты  Visual Studio 2008+  Нет IntelliSense и выделения

    цветом «из коробки»  T4 Toolbox (если версия студии 2008 или 2010)  ReSharper + ForTea plugin (если версия студии 2012+)  Отладка, начиная с Visual Studio 2012  Devart T4 Editor, Tangible t4 editor и др. 19/57
  16. Где я?  Как работает движок  Виды шаблонов 

    Структура и синтаксис шаблона  Переиспользование шаблонов  Подключение библиотек к шаблонам  Недостатки шаблонов 20/57
  17. Где я?  Как работает движок  Виды шаблонов 

    Структура и синтаксис шаблона  Переиспользование шаблонов  Подключение библиотек к шаблонам  Недостатки шаблонов 22/57
  18. Шаблоны времени выполнения  Преобразуются в класс на C# и

    компилируются вместе с проектом  Используются в процессе работы программы  Сам шаблон является частью проекта 24/57
  19. Шаблоны времени разработки  Фаза «компиляции» выполняется в памяти 

    Преобразуются в результирующий код  Результат выполнения шаблона является частью проекта 25/57
  20. Где я?  Как работает движок  Виды шаблонов 

    Структура и синтаксис шаблона  Переиспользование шаблонов  Подключение библиотек к шаблонам  Недостатки шаблонов 26/57
  21. Директивы  Объявляются конструкцией <#@ … #>  Задают параметры

    шаблона  Управляют выполнением шаблона 27/57
  22. Управляющий код  Реализует логику работы шаблона  Три основные

    конструкции: <# … #> – стандартный блок <#= … #> – блок выражений <#+ … #> – может содержать поля, свойства, методы и классы 29/57
  23. Где я?  Как работает движок  Виды шаблонов 

    Структура и синтаксис шаблона  Результат компиляции шаблона  Переиспользование шаблонов  Подключение библиотек к шаблонам  Недостатки шаблонов 30/57
  24. Где я?  Как работает движок  Виды шаблонов 

    Синтаксис и структура шаблона  Результат компиляции шаблона  Переиспользование шаблонов  Подключение библиотек к шаблонам  Недостатки шаблонов 34/57
  25. Где я?  Как работает движок  Виды шаблонов 

    Синтаксис и структура шаблона  Результат компиляции шаблона  Переиспользование шаблонов  Недостатки и подводные камни 37/57
  26. Недостатки и подводные камни  Нет встроенной подсветки синтаксиса и

    IntelliSense в Visual Studio  Сложно управлять большой вложенностью шаблонов  Мало документации и примеров 38/57
  27. Где я?  Описание задачи  Связка T4 + MS

    SQL  Примеры реально автоматизируемых фич  Интеграция с Enterprise Architect  Потенциал для развития 39/57
  28. Где я?  Задача  Связка T4 + MS SQL

     Интеграция с Enterprise Architect  Примеры реально автоматизируемых фич  Потенциал для развития 41/57
  29. Где я?  Задача  Связка T4 + MS SQL

     Интеграция с Enterprise Architect  Примеры реально автоматизируемых фич  Потенциал для развития 43/57
  30. Интеграция с Enterprise Architect  Enterprise Architect как инструмент моделирования

     Генерация DDL-скриптов  Генерация вспомогательных классов для использования в T4-шаблонах 44/57
  31. Где я?  Задача  Связка T4 + MS SQL

     Интеграция с Enterprise Architect  Примеры реально автоматизируемых фич  Потенциал для развития 45/57
  32. Стандартные конструкции  Создание процедур  Базовые конструкции процедур выносятся

    в базовые T4-шаблоны  Создание временных таблиц  Написание стандартных выражений (JOIN, SELECT, MERGE etc.) 49/57
  33. Где я?  Задача  Связка T4 + MS SQL

     Интеграция с Enterprise Architect  Примеры реально автоматизируемых фич  Потенциал для развития 54/57
  34. Потенциал для развития  Генерация alter-скриптов для структуры базы данных

     Использование знания о внешних ключах для генерации JOIN-выражений 55/57
  35. Основные ресурсы по T4  Architecture of Text Templates: https://msdn.microsoft.com/en-us/library/bb126261

     Oleg Sych blog: http://www.olegsych.com/  http://stackoverflow.com/search?q=T4  https://www.google.ru/#q=T4 56/57