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

Preview:

Citation preview

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

Спасибо!

Вопросы?

Павел Музыка

pmuzyka@custis.ru

57/57

Recommended