1. ZF2 Code Generation
или почему лучше день потерять,
а потом за 5мин. долететь
Saturday, April 21, 2012
2. Об авторе
Victor Farazdagi
Phrozn - phrozn.info
@farazdagi
zftalk.dev - zfcasts.ru
/farazdagi
Phing Contributor
ZF Evangelist & Contributor
Saturday, April 21, 2012
3. Список литературы
Skynet in ZF 2.0 Presentation by R. Schindler
The Unbearable Stupidity of Modeling by P. Friese
Ward’s Wiki aka PortlandPattern Repository,
the World’s first wiki
Code Generation in Action by J. Herrington
DSLs by M. Fowler
The Pragmatic Programmer by A. Hunt & D. Thomas
MDA Explained by A. Kleppe, J. Warmer, W. Bast
Saturday, April 21, 2012
4. Структура доклада
1. Определение концепции кодогенерации
2. Обзор существующих инструментов
3. Перспективы развития в ZF2
4. Выводы (честная попытка их сделать)
Saturday, April 21, 2012
6. ОБП
В ZF1 нет адекватного инструментария
Saturday, April 21, 2012
7. ОБП
В ZF1 нет адекватного инструментария
В ZF2 нет готового инструментария
Saturday, April 21, 2012
8. ОБП
В ZF1 нет адекватного инструментария
В ZF2 нет готового инструментария
Saturday, April 21, 2012
9. ОБП
В ZF1 нет адекватного инструментария
В ZF2 нет готового инструментария
Адекватного инструментария нет вообще
Saturday, April 21, 2012
10. What??
Адекватного инструментария нет вообще
Saturday, April 21, 2012
11. What??
Адекватного инструментария нет вообще
Saturday, April 21, 2012
12. What??
Адекватного инструментария нет вообще
Bitch, Pleeease *
* Дадагой ддуг, Вы ошибаетес!
Saturday, April 21, 2012
13. What??
Адекватного инструментария нет вообще
Bitch, Pleeease *
* Дадагой ддуг, Вы ошибаетес!
Saturday, April 21, 2012
14. Что это за зверь такой -
Кодогенерация?
Saturday, April 21, 2012
15. Определение
Кодогенерация - процесс преобразования высокоуровневого
(более абстрактного) кода в низкоуровневый (менее
абстрактный) код.
Процесс генерации кода обычно автоматизируют путем написания
инструмента (Code Generator) для такого преобразования.
Абстрактное Менее абстрактное
представление представление
Saturday, April 21, 2012
16. Определение (прод.)
Кодогенерация - написание программ,
которые пишут другие программы.
Исходный Code
Выходной код
код Generator
Saturday, April 21, 2012
17. Виды Генераторов Кода
Пассивные Активные
Генераторы Кода Генераторы Кода
Saturday, April 21, 2012
18. Виды Генераторов Кода
Пассивные Активные
Генераторы Кода Генераторы Кода
Save typing
Saturday, April 21, 2012
19. Виды Генераторов Кода
Пассивные Активные
Генераторы Кода Генераторы Кода
Save typing
Продвинутая шаблонизация
Saturday, April 21, 2012
20. Виды Генераторов Кода
Пассивные Активные
Генераторы Кода Генераторы Кода
Save typing
Продвинутая шаблонизация
Для создания артефактов
Saturday, April 21, 2012
21. Виды Генераторов Кода
Пассивные Активные
Генераторы Кода Генераторы Кода
Save typing
Продвинутая шаблонизация
Для создания артефактов
Design Smell
Saturday, April 21, 2012
22. Виды Генераторов Кода
Пассивные Активные
Генераторы Кода Генераторы Кода
Save typing DRY
Продвинутая шаблонизация
Для создания артефактов
Design Smell
Saturday, April 21, 2012
23. Виды Генераторов Кода
Пассивные Активные
Генераторы Кода Генераторы Кода
Save typing DRY
Продвинутая шаблонизация Отлично работает с CI
Для создания артефактов
Design Smell
Saturday, April 21, 2012
24. Виды Генераторов Кода
Пассивные Активные
Генераторы Кода Генераторы Кода
Save typing DRY
Продвинутая шаблонизация Отлично работает с CI
Для создания артефактов Дешевая (ре)генерация
Design Smell
Saturday, April 21, 2012
38. Анатомия проекта
Каркас
(ZF, Symfony, Yii)
Saturday, April 21, 2012
39. Анатомия проекта
Каркас
(ZF, Symfony, Yii)
Батарейки
(Doctrine, Twig, Buzz
etc)
Saturday, April 21, 2012
40. Анатомия проекта
Каркас
(ZF, Symfony, Yii)
Наш код
Батарейки
(Doctrine, Twig, Buzz
etc)
Saturday, April 21, 2012
41. Анатомия проекта
Нетривиальный
код Каркас
(ZF, Symfony, Yii)
Наш код
Батарейки
(Doctrine, Twig, Buzz
etc)
Saturday, April 21, 2012
42. Анатомия проекта
Нетривиальный
код Каркас
(ZF, Symfony, Yii)
Наш код
Рутинный/скучный код
Батарейки
(Doctrine, Twig, Buzz
etc)
Saturday, April 21, 2012
43. Качество кода
Generated code sucks!!!
Saturday, April 21, 2012
44. Качество кода
Generated code sucks!!!
Дадагой ддуг....
Saturday, April 21, 2012
45. Качество кода
Generated code sucks!!!
Ты сам пишешь генератор кода.
Сгенерированный код будет настолько хорош,
насколько хорош созданный тобой генератор.
Saturday, April 21, 2012
46. Кодогенерация и DSL
DSL DSL
General Purpose
DSL
Language
Saturday, April 21, 2012
47. DSLs + Code Generation
Saturday, April 21, 2012
48. Примеры
Генерация сущностей
Генерация форм из модели
SASS, LESS (CSS compiling/transforming)
JavaScript Generation
Оптимизация, преобразование, скаффолдинг
Генерация промежуточного DSL
тысячи их...
Saturday, April 21, 2012
58. RoR 3
Очень качественная реализация Упор на пассивные генераторы
Экономят кучу времени
Отличная расширяемость
Boilerplate code
Saturday, April 21, 2012
59. RoR 3
Очень качественная реализация Упор на пассивные генераторы
Экономят кучу времени
Отличная расширяемость
Boilerplate code
rails new rails generate rake
Saturday, April 21, 2012
60. Django
У тебя есть инструменты для
Другая философия простого решения задачи, но задачи
(включая рутинные) ты будешь
решать сам.
Saturday, April 21, 2012
61. Django
У тебя есть инструменты для
Другая философия простого решения задачи, но задачи
(включая рутинные) ты будешь
решать сам.
Admin App
Saturday, April 21, 2012
62. Django
У тебя есть инструменты для
Другая философия простого решения задачи, но задачи
(включая рутинные) ты будешь
решать сам.
Admin App Model Form
Saturday, April 21, 2012
63. Django
У тебя есть инструменты для
Другая философия простого решения задачи, но задачи
(включая рутинные) ты будешь
решать сам.
Admin App Model Form Generic Views
Saturday, April 21, 2012
68. Symfony2
Создан на базе (замечательного)
компонента Console
Легко создавать расширения
app/console
Отличная поддержка Doctrine2
CRUD, Entities, Entity, Form
Assets (styles, scripts) management
Saturday, April 21, 2012
69. CakePHP
cake bake Good interactive shells
Bakes Models, View,
Controllers, Fixtures, UTs
Генерация схемы для быстрого
cake schema
(повторого) развертывания.
cake i18n Генерация .pot файлов
Saturday, April 21, 2012
72. Zend_Tool_Framework
Действительно целый фреймворк
Providers Manifest & MetaData
CLI Handling Loaders
Registry
Saturday, April 21, 2012
73. Zend_Tool_Framework
Действительно целый фреймворк
Providers Manifest & MetaData
CLI Handling Loaders
Triumph of
Registry
over-engineering!
Saturday, April 21, 2012
74. Zend_Tool_Project
Куча провайдеров код которых будет использован
Project Module Controller View DbTable
Saturday, April 21, 2012
75. Zend_Tool_Project
Куча провайдеров код которых будет использован
Project Module Controller View DbTable
Context
Triumph of
Stateful over-engineering!
Saturday, April 21, 2012
76. Zend_Tool + zf.php
Фасад к ZendToolProjectProvider
Management taks: on/off layout, show version, db adapter etc
Model, View, Controller, Action, Module, Form
zf action-name provider-name
Контекстная справка aka --help system
Saturday, April 21, 2012
77. Zend_CodeGenerator
Генерация кода с использованием Refactored to
ОО-интерфейсов. ZendCodeGenerator
Планировался как general-purpose Good for what it is:
generator (SIC!!) PHP code generation
Saturday, April 21, 2012
78. Zend_Reflection
Refactored to
Расширяет PHP Reflection
ZendCodeReflection
Интроспеция файлов Анализ docblock-comments
Saturday, April 21, 2012
96. zf2.php tool
??
?
RFC - Tool 2.0 Будет активно обновляться
Saturday, April 21, 2012
97. zf2.php tool
??
?
RFC - Tool 2.0 Будет активно обновляться
Tabled on last IRC meeting
Thread in ML - go, write your
opinion!!
Saturday, April 21, 2012
98. zf2.php tool
??
?
RFC - Tool 2.0 Будет активно обновляться
Tabled on last IRC meeting
Ожидается дискуссия
Thread in ML - go, write your
opinion!!
Saturday, April 21, 2012
99. zf2.php tool
??
?
RFC - Tool 2.0 Будет активно обновляться
Tabled on last IRC meeting
Ожидается дискуссия
Thread in ML - go, write your
opinion!!
Часть модуля Zf2Tool
Saturday, April 21, 2012
100. zf2.php tool
??
?
RFC - Tool 2.0 Будет активно обновляться
Tabled on last IRC meeting
Ожидается дискуссия
Thread in ML - go, write your
opinion!!
Часть модуля Zf2Tool How to package?
Saturday, April 21, 2012
101. Yada, yada
(closing thoughts)
Saturday, April 21, 2012
102. 3 things to take home..
Saturday, April 21, 2012
103. 3 things to take home..
Give the proper respect to hand-coding
Saturday, April 21, 2012
104. 3 things to take home..
Give the proper respect to hand-coding
Don’t be afraid of automatic code generation
Saturday, April 21, 2012
105. 3 things to take home..
Give the proper respect to hand-coding
Don’t be afraid of automatic code generation
Define and constantly improve your toolset
Saturday, April 21, 2012
106. И последнее:
Contribute to ZF2
/zendframework/zf2
+100 Karma +100500 Skill +100 FUN
Saturday, April 21, 2012
107. Thanks!
@farazdagi
/farazdagi
Saturday, April 21, 2012