SlideShare a Scribd company logo
1 of 49
Download to read offline
23 октября 2015 года
Кодогенерация в .NET:
теория, практика и шаблоны Т4
Павел Музыка
Технический лидер
План
 Цели кодогенерации
 Design-time кодогенерация
 Run-time кодогенерация
 Советы по выбору генератора
2/25
Цели кодогенерации
3/25
Цели кодогенерации
4/25
Цели кодогенерации
4/25
Цели кодогенерации
4/25
Цели кодогенерации
4/25
Цели кодогенерации
5/25
Виды кодогенерации
6/25
Виды кодогенерации
 Во время разработки (Design-time)
 Все исходные данные известны
в момент разработки
 Результат генерации является
частью проекта
6/25
Виды кодогенерации
 Во время разработки (Design-time)
 Все исходные данные известны
в момент разработки
 Результат генерации является
частью проекта
 Во время выполнения (Run-time)
 Все исходные данные известны только
в момент выполнения
 Сам механизм генерации является
частью проекта
6/25
Design-time кодогенерация
7/25
Генерация SQL по метаданным
8/25
Клиентские прокси
для удаленного доступа
9/25
Клиентские прокси
для удаленного доступа
9/25
Server
Клиентские прокси
для удаленного доступа
9/25
Server
Метаданные
(WSDL,
OData)
Клиентские прокси
для удаленного доступа
9/25
Server
Метаданные
(WSDL,
OData)
Client
Клиентские прокси
для удаленного доступа
9/25
Server
Метаданные
(WSDL,
OData)
ClientClientProxy
Клиентские прокси
для удаленного доступа
9/25
Server
Метаданные
(WSDL,
OData)
ClientClientProxy
Кодогенерация
Инструменты для Design-time
кодогенерации
 Компиляторы
 Шаблоны T4 (Design-Time)
 XSLT
 RazorGenerator (не путать с движком Razor)
 Кодогенерация в средствах моделирования
(например, Enterprise Architect, ERwin Data
Modeler и др.)
10/25
Шаблоны T4
 T4 = Text Template Transformation Toolkit
 Движок кодогенерации, встроенный
в Visual Studio (начиная с 2008)
 Позволяет писать логику шаблона
на C# или VB.NET
 Позволяет генерировать любой код
 Шаблоны могут быть переиспользуемыми
(наследование, включение)
11/25
Как работают шаблоны T4
12/25
Как работают шаблоны T4
12/25
Как работают шаблоны T4
12/25
Как работают шаблоны T4
12/25
Как работают шаблоны T4
12/25
Как работают шаблоны T4
12/25
Как работают шаблоны T4
12/25
Как работают шаблоны T4
12/25
Как работают шаблоны T4
12/25
Виды шаблонов T4
Времени выполнения (Run-time)Времени разработки (Design-time)
13/25
Run-time кодогенерация
14/25
Run-time кодогенерация
 Генерация HTML
 Генерация по динамическим метаданным
 Генетические алгоритмы и программирование
15/25
Непредсказуемость эволюции
16/25
Непредсказуемость эволюции
17/25
Инструменты для Run-time
кодогенерации
 ORM (NHibernate, Entity Framework и др.)
 Шаблоны T4 (Run-time)
 Razor Engine (ASP.NET MVC)
 CodeDOM, Roslyn
18/25
Run-time кодогенерация
19/25
Run-time кодогенерация
19/25
Run-time кодогенерация
19/25
Предварительная генерация view
 RazorGenerator
 Работает во время разработки
 Генерирует генератор View
 Который в Run-time генерирует view
20/25
Предварительная генерация view
 RazorGenerator
 Работает во время разработки
 Генерирует генератор View
 Который в Run-time генерирует view
20/25
Run-time кодогенерация
21/25
Run-time кодогенерация
21/25
Run-time кодогенерация
21/25
Run-time кодогенерация
21/25
Советы по выбору генератора
22/25
Советы по выбору генератора
 Шаблоны T4 и Razor
 Если необходимо сгенерировать простой
повторяющийся код по шаблону (например,
клиентские прокси для OData)
 Если необходимо сгенерировать
произвольный текст по шаблону
23/25
Советы по выбору генератора
 CodeDOM и Roslyn
 Если необходимо сгенерировать код
на C# или VB.NET
 Если целью является создание кодогенератора
 Если логика генерации важнее шаблона
результирующего кода
24/25
Спасибо!
Вопросы?
25/25
Павел Музыка
pmuzyka@custis.ru

More Related Content

What's hot

Компонент-платформа / Александр Лобашев (Avito)
Компонент-платформа / Александр Лобашев (Avito) Компонент-платформа / Александр Лобашев (Avito)
Компонент-платформа / Александр Лобашев (Avito)
Ontico
 

What's hot (7)

Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
 
Дефицит ресурсов тестирования... или нет?
Дефицит ресурсов тестирования... или нет?Дефицит ресурсов тестирования... или нет?
Дефицит ресурсов тестирования... или нет?
 
Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
 
Team workflow
Team workflowTeam workflow
Team workflow
 
Design Platform FrontendConf
Design Platform FrontendConfDesign Platform FrontendConf
Design Platform FrontendConf
 
Вебинар о конференции HighLoad++
Вебинар о конференции HighLoad++Вебинар о конференции HighLoad++
Вебинар о конференции HighLoad++
 
Компонент-платформа / Александр Лобашев (Avito)
Компонент-платформа / Александр Лобашев (Avito) Компонент-платформа / Александр Лобашев (Avito)
Компонент-платформа / Александр Лобашев (Avito)
 

Viewers also liked

презентация к исследовательской работе
презентация к исследовательской работепрезентация к исследовательской работе
презентация к исследовательской работе
Сергей Дружинин
 

Viewers also liked (6)

Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
 
презентация к исследовательской работе
презентация к исследовательской работепрезентация к исследовательской работе
презентация к исследовательской работе
 
Оформление научно-исследовательской работы
Оформление научно-исследовательской работыОформление научно-исследовательской работы
Оформление научно-исследовательской работы
 
Презентация для научной конференции (Химфарм академия)
Презентация для научной конференции (Химфарм академия)Презентация для научной конференции (Химфарм академия)
Презентация для научной конференции (Химфарм академия)
 
Научно-исследовательская работа
Научно-исследовательская работаНаучно-исследовательская работа
Научно-исследовательская работа
 
Mobile Is Eating the World (2016)
Mobile Is Eating the World (2016)Mobile Is Eating the World (2016)
Mobile Is Eating the World (2016)
 

Similar to Кодогенерация в .NET: теория, практика и шаблоны T4

WebCamp: Developer Day: Разработка фронтенда: от кузницы до металлургического...
WebCamp: Developer Day: Разработка фронтенда: от кузницы до металлургического...WebCamp: Developer Day: Разработка фронтенда: от кузницы до металлургического...
WebCamp: Developer Day: Разработка фронтенда: от кузницы до металлургического...
GeeksLab Odessa
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
Gleb Rybalko
 
Anatol Filin Pragmatic Documentation 0 5
Anatol Filin Pragmatic Documentation 0 5Anatol Filin Pragmatic Documentation 0 5
Anatol Filin Pragmatic Documentation 0 5
rit2010
 

Similar to Кодогенерация в .NET: теория, практика и шаблоны T4 (20)

WebCamp: Developer Day: Разработка фронтенда: от кузницы до металлургического...
WebCamp: Developer Day: Разработка фронтенда: от кузницы до металлургического...WebCamp: Developer Day: Разработка фронтенда: от кузницы до металлургического...
WebCamp: Developer Day: Разработка фронтенда: от кузницы до металлургического...
 
Вебинар "Введение в процесс разработки ПО"
Вебинар "Введение в процесс разработки ПО"Вебинар "Введение в процесс разработки ПО"
Вебинар "Введение в процесс разработки ПО"
 
Автоматическая генерация C кода и тестирование на целевых вычислителях
Автоматическая генерация C кода и тестирование на целевых вычислителяхАвтоматическая генерация C кода и тестирование на целевых вычислителях
Автоматическая генерация C кода и тестирование на целевых вычислителях
 
DDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в кодDDD: проблемы и решения при отражении модели предметной области в код
DDD: проблемы и решения при отражении модели предметной области в код
 
О фреймворках Backend conf 2016
О фреймворках Backend conf 2016О фреймворках Backend conf 2016
О фреймворках Backend conf 2016
 
О фреймворках / Роман Ивлиев (Банки.ру)
О фреймворках / Роман Ивлиев (Банки.ру)О фреймворках / Роман Ивлиев (Банки.ру)
О фреймворках / Роман Ивлиев (Банки.ру)
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
 
Software Analytics in frontend
Software Analytics in frontendSoftware Analytics in frontend
Software Analytics in frontend
 
Виталий Харисов - Общий цикл разработки
Виталий Харисов - Общий цикл разработкиВиталий Харисов - Общий цикл разработки
Виталий Харисов - Общий цикл разработки
 
Anatol Filin Pragmatic Documentation 0 5
Anatol Filin Pragmatic Documentation 0 5Anatol Filin Pragmatic Documentation 0 5
Anatol Filin Pragmatic Documentation 0 5
 
Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)
Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)
Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)
 
Инструменты автоматизации тестирования - дефективные
Инструменты автоматизации тестирования - дефективныеИнструменты автоматизации тестирования - дефективные
Инструменты автоматизации тестирования - дефективные
 
02 docsvision
02 docsvision02 docsvision
02 docsvision
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Ddd softwarepeople-2013-tsepkov
Ddd softwarepeople-2013-tsepkovDdd softwarepeople-2013-tsepkov
Ddd softwarepeople-2013-tsepkov
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
 
Использовании TypeScript для Node.js
Использовании TypeScript для Node.jsИспользовании TypeScript для Node.js
Использовании TypeScript для Node.js
 

More from CUSTIS

More from CUSTIS (20)

Три истории микросервисов, или MSA для Enterprise
Три истории микросервисов, или MSA для EnterpriseТри истории микросервисов, или MSA для Enterprise
Три истории микросервисов, или MSA для Enterprise
 
Долгоживущие ИТ в динамичном ритейле
Долгоживущие ИТ в динамичном ритейлеДолгоживущие ИТ в динамичном ритейле
Долгоживущие ИТ в динамичном ритейле
 
Будущее уже наступило: от Agile к бирюзовым организациям
Будущее уже наступило: от Agile к бирюзовым организациямБудущее уже наступило: от Agile к бирюзовым организациям
Будущее уже наступило: от Agile к бирюзовым организациям
 
Как выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиямиКак выбрать для проекта практики проектирования и работы с требованиями
Как выбрать для проекта практики проектирования и работы с требованиями
 
Диаграммы учета как средство для наглядного и целостного отображения правил у...
Диаграммы учета как средство для наглядного и целостного отображения правил у...Диаграммы учета как средство для наглядного и целостного отображения правил у...
Диаграммы учета как средство для наглядного и целостного отображения правил у...
 
Сотрудничество с корпорациями: рецепты из практики
Сотрудничество с корпорациями: рецепты из практикиСотрудничество с корпорациями: рецепты из практики
Сотрудничество с корпорациями: рецепты из практики
 
Agile — ответ на вызовы третьей промышленной революции
Agile — ответ на вызовы третьей промышленной революцииAgile — ответ на вызовы третьей промышленной революции
Agile — ответ на вызовы третьей промышленной революции
 
Опыт построения микросервисной архитектуры в цифровом банке
Опыт построения микросервисной архитектуры в цифровом банкеОпыт построения микросервисной архитектуры в цифровом банке
Опыт построения микросервисной архитектуры в цифровом банке
 
Золотая лихорадка MSA: почему нам не подошли микросервисы?
Золотая лихорадка MSA: почему нам не подошли микросервисы?Золотая лихорадка MSA: почему нам не подошли микросервисы?
Золотая лихорадка MSA: почему нам не подошли микросервисы?
 
Барьеры микросервисной архитектуры
Барьеры микросервисной архитектурыБарьеры микросервисной архитектуры
Барьеры микросервисной архитектуры
 
Три истории микросервисов
Три истории микросервисовТри истории микросервисов
Три истории микросервисов
 
От монолитных моделей предметной области — к модульным
От монолитных моделей предметной области — к модульнымОт монолитных моделей предметной области — к модульным
От монолитных моделей предметной области — к модульным
 
Проблемы управления правами доступа к информационным системам крупной торгово...
Проблемы управления правами доступа к информационным системам крупной торгово...Проблемы управления правами доступа к информационным системам крупной торгово...
Проблемы управления правами доступа к информационным системам крупной торгово...
 
Будущее omni-channel маркетинга: инструменты, кейсы и цифры
Будущее omni-channel маркетинга: инструменты, кейсы и цифрыБудущее omni-channel маркетинга: инструменты, кейсы и цифры
Будущее omni-channel маркетинга: инструменты, кейсы и цифры
 
Agile и управление знаниями в ИТ-проектах
Agile и управление знаниями в ИТ-проектахAgile и управление знаниями в ИТ-проектах
Agile и управление знаниями в ИТ-проектах
 
State of the .Net Performance
State of the .Net PerformanceState of the .Net Performance
State of the .Net Performance
 
Ответственность за качество в разных ИТ-проектах: в чем она и как ее разделять
Ответственность за качество в разных ИТ-проектах: в чем она и как ее разделятьОтветственность за качество в разных ИТ-проектах: в чем она и как ее разделять
Ответственность за качество в разных ИТ-проектах: в чем она и как ее разделять
 
Опыт применения метода ATAM для оценки архитектуры
Опыт применения метода ATAM для оценки архитектурыОпыт применения метода ATAM для оценки архитектуры
Опыт применения метода ATAM для оценки архитектуры
 
Гибридный подход к управлению правами доступа: когда стандартного IDM не хватает
Гибридный подход к управлению правами доступа: когда стандартного IDM не хватаетГибридный подход к управлению правами доступа: когда стандартного IDM не хватает
Гибридный подход к управлению правами доступа: когда стандартного IDM не хватает
 
Собираем кубик Рубика: восстановление архитектурного описания корпоративной р...
Собираем кубик Рубика: восстановление архитектурного описания корпоративной р...Собираем кубик Рубика: восстановление архитектурного описания корпоративной р...
Собираем кубик Рубика: восстановление архитектурного описания корпоративной р...
 

Кодогенерация в .NET: теория, практика и шаблоны T4