Реальная кодогенерация с использованием t4-шаблонов
TRANSCRIPT
![Page 1: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/1.jpg)
2 апреля 2015 года
Реальная кодогенерация
с использованием T4-шаблонов
Павел Музыка
Технический лидер
![Page 2: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/2.jpg)
О себе
Окончил Калужский филиал МГТУ
им. Н. Э. Баумана
В промышленной разработке с 2005 года
В CUSTIS c февраля 2012 года
Сертифицированный разработчик
MS SQL, WinForms и WPF
2/57
![Page 3: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/3.jpg)
О компании
Проектирование Заказная разработка
Бережное внедрение Масштабных IT-систем
3/57
![Page 4: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/4.jpg)
Три части, три плана
4/57
![Page 5: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/5.jpg)
Вводная часть
Что такое кодогенерация
Что такое шаблоны T4
Другие макроязыки
Инструментальная поддержка
5/57
![Page 6: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/6.jpg)
Теоретическая часть
Как работает движок
Виды шаблонов
Структура и синтаксис шаблона
Переиспользование шаблонов
Подключение библиотек к шаблонам
Недостатки шаблонов
6/57
![Page 7: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/7.jpg)
Практическая часть
Задача
Связка T4 + MS SQL
Интеграция с Enterprise Architect
Примеры реально автоматизируемых фич
Потенциал для развития
7/57
![Page 8: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/8.jpg)
Где я?
Что такое кодогенерация
Что такое шаблоны T4
Другие макроязыки
Инструментальная поддержка
8/57
![Page 9: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/9.jpg)
Примеры кодогенерации
Компиляторы языков высокого уровня
Шаблоны файлов и проектов в Visual Studio
Визуальный редактор в Visual Studio
Создание таблиц через мастер в SQL Server
Management Studio
и много еще…
9/57
![Page 10: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/10.jpg)
Что такое кодогенерация?
Wikipedia:
Кодогенерация – часть процесса
компиляции, когда специальная часть
компилятора, кодогенератор, конвертирует
синтаксически корректную программу
в последовательность инструкций,
которые могут выполняться на машине.
10/57
![Page 11: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/11.jpg)
Цели кодогенерации
Избавить от скучной рутинной работы
Уменьшить количество ошибок
Ускорить разработку
Позволяют не-программистам быть
программистами (ведь можно писать
сайты в Word!)
11/57
![Page 12: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/12.jpg)
Особенности написания генераторов
Читабельным должен быть код самого
генератора
Результат работы генератора
необязательно должен быть читабельным
В результате кодогенерации могут
дублироваться большие блоки кода
12/57
![Page 13: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/13.jpg)
Где я?
Что такое кодогенерация
Что такое шаблоны T4
Другие макроязыки
Инструментальная поддержка
13/57
![Page 14: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/14.jpg)
Что такое шаблон?
<#= ИмяУчастника #>
14/57
![Page 15: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/15.jpg)
Шаблоны T4
T4 = Text Template Transformation Toolkit
Встроенный в Visual Studio
(начиная с 2008) движок кодогенерации
Позволяет писать логику шаблона на C#
или VB.NET
Позволяет генерировать любой код
Шаблоны могут быть переиспользуемыми
(наследование, включение)
15/57
![Page 16: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/16.jpg)
Где я?
Что такое кодогенерация
Что такое шаблоны T4
Другие макроязыки
Инструментальная поддержка
16/57
![Page 17: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/17.jpg)
Другие макроязыки
T4 – это макроязык, встроенный
в Visual Studio
Freemarker – движок шаблонов на Java
Макропроцессор M4 – создан Брайаном
Керниганом и Денисом Ритчи
Система верстки TeX – создана
Дональдом Кнутом
LaTeX – набор макрорасширений для TeX
17/57
![Page 18: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/18.jpg)
Где я?
Что такое кодогенерация
Что такое шаблоны T4
Другие макроязыки
Инструментальная поддержка
18/57
![Page 19: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/19.jpg)
Инструменты
Visual Studio 2008+
Нет IntelliSense
и выделения цветом «из коробки»
T4 Toolbox
(если версия студии 2008 или 2010)
ReSharper + ForTea plugin
(если версия студии 2012+)
Отладка, начиная с Visual Studio 2012
Devart T4 Editor, Tangible t4 editor и др.
19/57
![Page 20: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/20.jpg)
Где я?
Как работает движок
Виды шаблонов
Структура и синтаксис шаблона
Переиспользование шаблонов
Подключение библиотек к шаблонам
Недостатки шаблонов
20/57
![Page 21: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/21.jpg)
Как работает движок
21/57
![Page 22: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/22.jpg)
Где я?
Как работает движок
Виды шаблонов
Структура и синтаксис шаблона
Переиспользование шаблонов
Подключение библиотек к шаблонам
Недостатки шаблонов
22/57
![Page 23: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/23.jpg)
Виды шаблонов
Времени выполнения (run-time) Времени разработки (design-time)
23/57
![Page 24: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/24.jpg)
Шаблоны времени выполнения
Преобразуются в класс на C#
и компилируются вместе с проектом
Используются в процессе работы программы
Сам шаблон является частью проекта
24/57
![Page 25: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/25.jpg)
Шаблоны времени разработки
Фаза «компиляции» выполняется в памяти
Преобразуются в результирующий код
Результат выполнения шаблона является
частью проекта
25/57
![Page 26: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/26.jpg)
Где я?
Как работает движок
Виды шаблонов
Структура и синтаксис шаблона
Переиспользование шаблонов
Подключение библиотек к шаблонам
Недостатки шаблонов
26/57
![Page 27: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/27.jpg)
Директивы
Объявляются конструкцией <#@ … #>
Задают параметры шаблона
Управляют выполнением шаблона
27/57
![Page 28: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/28.jpg)
Текст шаблона
Шаблон результирующего файла
Задает структуру результата
Обычный текст
28/57
![Page 29: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/29.jpg)
Управляющий код
Реализует логику работы шаблона
Три основные конструкции:
<# … #> – стандартный блок
<#= … #> – блок выражений
<#+ … #> – может содержать поля,
свойства, методы и классы
29/57
![Page 30: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/30.jpg)
Где я?
Как работает движок
Виды шаблонов
Структура и синтаксис шаблона
Результат компиляции шаблона
Переиспользование шаблонов
Подключение библиотек к шаблонам
Недостатки шаблонов
30/57
![Page 31: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/31.jpg)
Управляющий код. Пример 1
31/57
![Page 32: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/32.jpg)
Управляющий код. Пример 2
32/57
![Page 33: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/33.jpg)
Управляющий код. Пример 3
\\
33/57
![Page 34: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/34.jpg)
Где я?
Как работает движок
Виды шаблонов
Синтаксис и структура шаблона
Результат компиляции шаблона
Переиспользование шаблонов
Подключение библиотек к шаблонам
Недостатки шаблонов
34/57
![Page 35: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/35.jpg)
Включение шаблонов
TemplateForInclude.ttinclude:
UsingInclude.tt:
35/57
![Page 36: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/36.jpg)
Включение шаблонов
36/57
![Page 37: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/37.jpg)
Где я?
Как работает движок
Виды шаблонов
Синтаксис и структура шаблона
Результат компиляции шаблона
Переиспользование шаблонов
Недостатки и подводные камни
37/57
![Page 38: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/38.jpg)
Недостатки и подводные камни
Нет встроенной подсветки синтаксиса
и IntelliSense в Visual Studio
Сложно управлять большой вложенностью
шаблонов
Мало документации и примеров
38/57
![Page 39: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/39.jpg)
Где я?
Описание задачи
Связка T4 + MS SQL
Примеры реально автоматизируемых фич
Интеграция с Enterprise Architect
Потенциал для развития
39/57
![Page 40: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/40.jpg)
Задача
40/57
![Page 41: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/41.jpg)
Где я?
Задача
Связка T4 + MS SQL
Интеграция с Enterprise Architect
Примеры реально автоматизируемых фич
Потенциал для развития
41/57
![Page 42: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/42.jpg)
Пример в Visual Studio
Sample 1
42/57
![Page 43: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/43.jpg)
Где я?
Задача
Связка T4 + MS SQL
Интеграция с Enterprise Architect
Примеры реально автоматизируемых фич
Потенциал для развития
43/57
![Page 44: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/44.jpg)
Интеграция с Enterprise Architect
Enterprise Architect как инструмент
моделирования
Генерация DDL-скриптов
Генерация вспомогательных классов
для использования в T4-шаблонах
44/57
![Page 45: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/45.jpg)
Где я?
Задача
Связка T4 + MS SQL
Интеграция с Enterprise Architect
Примеры реально автоматизируемых фич
Потенциал для развития
45/57
![Page 46: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/46.jpg)
Пример в Visual Studio
Sample 2
46/57
![Page 47: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/47.jpg)
Хранимые процедуры
Использование T4-шаблонов для создания
процедур
Базовые конструкции запросов
Сопоставление колонок
47/57
![Page 48: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/48.jpg)
Пример в Visual Studio
Sample 3
48/57
![Page 49: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/49.jpg)
Стандартные конструкции
Создание процедур
Базовые конструкции процедур выносятся
в базовые T4-шаблоны
Создание временных таблиц
Написание стандартных выражений
(JOIN, SELECT, MERGE etc.)
49/57
![Page 50: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/50.jpg)
Пример в Visual Studio
Sample 4
50/57
![Page 51: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/51.jpg)
Стандартные конструкции
Создание временных таблиц
Написание стандартных выражений
(JOIN, SELECT, INSERT etc.)
51/57
![Page 52: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/52.jpg)
Пример в Visual Studio
Sample 5
52/57
![Page 53: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/53.jpg)
Стандартные конструкции
Служебные колонки для всех таблиц
Еще больше автоматизации!
53/57
![Page 54: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/54.jpg)
Где я?
Задача
Связка T4 + MS SQL
Интеграция с Enterprise Architect
Примеры реально автоматизируемых фич
Потенциал для развития
54/57
![Page 55: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/55.jpg)
Потенциал для развития
Генерация alter-скриптов для структуры
базы данных
Использование знания о внешних ключах
для генерации JOIN-выражений
55/57
![Page 56: Реальная кодогенерация с использованием T4-шаблонов](https://reader034.vdocuments.pub/reader034/viewer/2022052223/55a9b5e71a28abd2698b484b/html5/thumbnails/56.jpg)
Основные ресурсы по 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