57
2 апреля 2015 года Реальная кодогенерация с использованием T4-шаблонов Павел Музыка Технический лидер

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

  • Upload
    custis

  • View
    65

  • Download
    3

Embed Size (px)

Citation preview

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

2 апреля 2015 года

Реальная кодогенерация

с использованием T4-шаблонов

Павел Музыка

Технический лидер

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

О себе

Окончил Калужский филиал МГТУ

им. Н. Э. Баумана

В промышленной разработке с 2005 года

В CUSTIS c февраля 2012 года

Сертифицированный разработчик

MS SQL, WinForms и WPF

2/57

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

О компании

Проектирование Заказная разработка

Бережное внедрение Масштабных IT-систем

3/57

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

Три части, три плана

4/57

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

Вводная часть

Что такое кодогенерация

Что такое шаблоны T4

Другие макроязыки

Инструментальная поддержка

5/57

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

Теоретическая часть

Как работает движок

Виды шаблонов

Структура и синтаксис шаблона

Переиспользование шаблонов

Подключение библиотек к шаблонам

Недостатки шаблонов

6/57

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

Практическая часть

Задача

Связка T4 + MS SQL

Интеграция с Enterprise Architect

Примеры реально автоматизируемых фич

Потенциал для развития

7/57

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

Где я?

Что такое кодогенерация

Что такое шаблоны T4

Другие макроязыки

Инструментальная поддержка

8/57

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

Примеры кодогенерации

Компиляторы языков высокого уровня

Шаблоны файлов и проектов в Visual Studio

Визуальный редактор в Visual Studio

Создание таблиц через мастер в SQL Server

Management Studio

и много еще…

9/57

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

Что такое кодогенерация?

Wikipedia:

Кодогенерация – часть процесса

компиляции, когда специальная часть

компилятора, кодогенератор, конвертирует

синтаксически корректную программу

в последовательность инструкций,

которые могут выполняться на машине.

10/57

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

Цели кодогенерации

Избавить от скучной рутинной работы

Уменьшить количество ошибок

Ускорить разработку

Позволяют не-программистам быть

программистами (ведь можно писать

сайты в Word!)

11/57

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

Особенности написания генераторов

Читабельным должен быть код самого

генератора

Результат работы генератора

необязательно должен быть читабельным

В результате кодогенерации могут

дублироваться большие блоки кода

12/57

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

Где я?

Что такое кодогенерация

Что такое шаблоны T4

Другие макроязыки

Инструментальная поддержка

13/57

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

Что такое шаблон?

<#= ИмяУчастника #>

14/57

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

Шаблоны T4

T4 = Text Template Transformation Toolkit

Встроенный в Visual Studio

(начиная с 2008) движок кодогенерации

Позволяет писать логику шаблона на C#

или VB.NET

Позволяет генерировать любой код

Шаблоны могут быть переиспользуемыми

(наследование, включение)

15/57

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

Где я?

Что такое кодогенерация

Что такое шаблоны T4

Другие макроязыки

Инструментальная поддержка

16/57

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

Другие макроязыки

T4 – это макроязык, встроенный

в Visual Studio

Freemarker – движок шаблонов на Java

Макропроцессор M4 – создан Брайаном

Керниганом и Денисом Ритчи

Система верстки TeX – создана

Дональдом Кнутом

LaTeX – набор макрорасширений для TeX

17/57

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

Где я?

Что такое кодогенерация

Что такое шаблоны T4

Другие макроязыки

Инструментальная поддержка

18/57

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

Инструменты

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-шаблонов

Где я?

Как работает движок

Виды шаблонов

Структура и синтаксис шаблона

Переиспользование шаблонов

Подключение библиотек к шаблонам

Недостатки шаблонов

20/57

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

Как работает движок

21/57

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

Где я?

Как работает движок

Виды шаблонов

Структура и синтаксис шаблона

Переиспользование шаблонов

Подключение библиотек к шаблонам

Недостатки шаблонов

22/57

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

Виды шаблонов

Времени выполнения (run-time) Времени разработки (design-time)

23/57

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

Шаблоны времени выполнения

Преобразуются в класс на C#

и компилируются вместе с проектом

Используются в процессе работы программы

Сам шаблон является частью проекта

24/57

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

Шаблоны времени разработки

Фаза «компиляции» выполняется в памяти

Преобразуются в результирующий код

Результат выполнения шаблона является

частью проекта

25/57

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

Где я?

Как работает движок

Виды шаблонов

Структура и синтаксис шаблона

Переиспользование шаблонов

Подключение библиотек к шаблонам

Недостатки шаблонов

26/57

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

Директивы

Объявляются конструкцией <#@ … #>

Задают параметры шаблона

Управляют выполнением шаблона

27/57

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

Текст шаблона

Шаблон результирующего файла

Задает структуру результата

Обычный текст

28/57

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

Управляющий код

Реализует логику работы шаблона

Три основные конструкции:

<# … #> – стандартный блок

<#= … #> – блок выражений

<#+ … #> – может содержать поля,

свойства, методы и классы

29/57

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

Где я?

Как работает движок

Виды шаблонов

Структура и синтаксис шаблона

Результат компиляции шаблона

Переиспользование шаблонов

Подключение библиотек к шаблонам

Недостатки шаблонов

30/57

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

Управляющий код. Пример 1

31/57

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

Управляющий код. Пример 2

32/57

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

Управляющий код. Пример 3

\\

33/57

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

Где я?

Как работает движок

Виды шаблонов

Синтаксис и структура шаблона

Результат компиляции шаблона

Переиспользование шаблонов

Подключение библиотек к шаблонам

Недостатки шаблонов

34/57

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

Включение шаблонов

TemplateForInclude.ttinclude:

UsingInclude.tt:

35/57

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

Включение шаблонов

36/57

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

Где я?

Как работает движок

Виды шаблонов

Синтаксис и структура шаблона

Результат компиляции шаблона

Переиспользование шаблонов

Недостатки и подводные камни

37/57

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

Недостатки и подводные камни

Нет встроенной подсветки синтаксиса

и IntelliSense в Visual Studio

Сложно управлять большой вложенностью

шаблонов

Мало документации и примеров

38/57

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

Где я?

Описание задачи

Связка T4 + MS SQL

Примеры реально автоматизируемых фич

Интеграция с Enterprise Architect

Потенциал для развития

39/57

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

Задача

40/57

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

Где я?

Задача

Связка T4 + MS SQL

Интеграция с Enterprise Architect

Примеры реально автоматизируемых фич

Потенциал для развития

41/57

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

Пример в Visual Studio

Sample 1

42/57

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

Где я?

Задача

Связка T4 + MS SQL

Интеграция с Enterprise Architect

Примеры реально автоматизируемых фич

Потенциал для развития

43/57

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

Интеграция с Enterprise Architect

Enterprise Architect как инструмент

моделирования

Генерация DDL-скриптов

Генерация вспомогательных классов

для использования в T4-шаблонах

44/57

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

Где я?

Задача

Связка T4 + MS SQL

Интеграция с Enterprise Architect

Примеры реально автоматизируемых фич

Потенциал для развития

45/57

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

Пример в Visual Studio

Sample 2

46/57

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

Хранимые процедуры

Использование T4-шаблонов для создания

процедур

Базовые конструкции запросов

Сопоставление колонок

47/57

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

Пример в Visual Studio

Sample 3

48/57

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

Стандартные конструкции

Создание процедур

Базовые конструкции процедур выносятся

в базовые T4-шаблоны

Создание временных таблиц

Написание стандартных выражений

(JOIN, SELECT, MERGE etc.)

49/57

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

Пример в Visual Studio

Sample 4

50/57

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

Стандартные конструкции

Создание временных таблиц

Написание стандартных выражений

(JOIN, SELECT, INSERT etc.)

51/57

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

Пример в Visual Studio

Sample 5

52/57

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

Стандартные конструкции

Служебные колонки для всех таблиц

Еще больше автоматизации!

53/57

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

Где я?

Задача

Связка T4 + MS SQL

Интеграция с Enterprise Architect

Примеры реально автоматизируемых фич

Потенциал для развития

54/57

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

Потенциал для развития

Генерация alter-скриптов для структуры

базы данных

Использование знания о внешних ключах

для генерации JOIN-выражений

55/57

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

Основные ресурсы по 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

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

Спасибо!

Вопросы?

Павел Музыка

[email protected]

57/57