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