ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
-
Upload
zfconf-conference -
Category
Technology
-
view
2.387 -
download
1
description
Transcript of ZFConf 2012: Code Generation и Scaffolding в Zend Framework 2 (Виктор Фараздаги)
ZF2 Code Generationили почему лучше день потерять, а потом за 5мин. долететь
Saturday, April 21, 2012
Об авторе
Phrozn - phrozn.info
zftalk.dev - zfcasts.ru
Phing Contributor
ZF Evangelist & Contributor
Victor Farazdagi
/farazdagi
@farazdagi
Saturday, April 21, 2012
Список литературы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
Структура доклада
1.Определение концепции кодогенерации
2.Обзор существующих инструментов
3.Перспективы развития в ZF2
4.Выводы (честная попытка их сделать)
Saturday, April 21, 2012
ОБП
Saturday, April 21, 2012
ОБП
В ZF1 нет адекватного инструментария
Saturday, April 21, 2012
ОБП
В ZF1 нет адекватного инструментария
В ZF2 нет готового инструментария
Saturday, April 21, 2012
ОБП
В ZF1 нет адекватного инструментария
В ZF2 нет готового инструментария
Saturday, April 21, 2012
ОБП
Адекватного инструментария нет вообще
В ZF1 нет адекватного инструментария
В ZF2 нет готового инструментария
Saturday, April 21, 2012
Адекватного инструментария нет вообще
What??
Saturday, April 21, 2012
Адекватного инструментария нет вообще
What??
Saturday, April 21, 2012
Адекватного инструментария нет вообще
What??
Bitch, Pleeease *
* Дадагой ддуг, Вы ошибаетес!
Saturday, April 21, 2012
Адекватного инструментария нет вообще
What??
Bitch, Pleeease *
* Дадагой ддуг, Вы ошибаетес!
Saturday, April 21, 2012
Что это за зверь такой - Кодогенерация?
Saturday, April 21, 2012
Определение
Кодогенерация - процесс преобразования высокоуровневого (более абстрактного) кода в низкоуровневый (менее
абстрактный) код.
Процесс генерации кода обычно автоматизируют путем написания инструмента (Code Generator) для такого преобразования.
Абстрактное представление
Менее абстрактное представление
Saturday, April 21, 2012
Определение (прод.)
Кодогенерация - написание программ, которые пишут другие программы.
Исходный код Выходной кодCode
Generator
Saturday, April 21, 2012
Виды Генераторов Кода
Пассивные Генераторы Кода
Активные Генераторы Кода
Saturday, April 21, 2012
Виды Генераторов Кода
Пассивные Генераторы Кода
Активные Генераторы Кода
Save typing
Saturday, April 21, 2012
Виды Генераторов Кода
Пассивные Генераторы Кода
Активные Генераторы Кода
Save typing
Продвинутая шаблонизация
Saturday, April 21, 2012
Виды Генераторов Кода
Пассивные Генераторы Кода
Активные Генераторы Кода
Save typing
Продвинутая шаблонизация
Для создания артефактов
Saturday, April 21, 2012
Виды Генераторов Кода
Пассивные Генераторы Кода
Активные Генераторы Кода
Save typing
Продвинутая шаблонизация
Для создания артефактов
Design Smell
Saturday, April 21, 2012
Виды Генераторов Кода
Пассивные Генераторы Кода
Активные Генераторы Кода
Save typing
Продвинутая шаблонизация
Для создания артефактов
Design Smell
DRY
Saturday, April 21, 2012
Виды Генераторов Кода
Пассивные Генераторы Кода
Активные Генераторы Кода
Save typing
Продвинутая шаблонизация
Для создания артефактов
Design Smell
Отлично работает с CI
DRY
Saturday, April 21, 2012
Виды Генераторов Кода
Пассивные Генераторы Кода
Активные Генераторы Кода
Save typing
Продвинутая шаблонизация
Для создания артефактов
Design Smell
Отлично работает с CI
DRY
Дешевая (ре)генерация
Saturday, April 21, 2012
Почему это важно?
Saturday, April 21, 2012
Почему это важно?
Время программера - главная ценность
Saturday, April 21, 2012
Почему это важно?
Время программера - главная ценность Креативность
Saturday, April 21, 2012
Почему это важно?
Время программера - главная ценность Креативность
Рутинные задачи
Saturday, April 21, 2012
Почему это важно?
Время программера - главная ценность Креативность
Рутинные задачи
Кодогенерация
Saturday, April 21, 2012
Почему это важно?
Время программера - главная ценность Креативность
Рутинные задачи
Кодогенерация
Скука
Saturday, April 21, 2012
Почему это важно?
Время программера - главная ценность Креативность
Рутинные задачи
Кодогенерация
Скука
Saturday, April 21, 2012
Почему это важно?
Время программера - главная ценность Креативность
Рутинные задачи
Кодогенерация
Скука
Saturday, April 21, 2012
Почему это важно?
Время программера - главная ценность Креативность
Рутинные задачи
Кодогенерация
Скука
Saturday, April 21, 2012
Почему это важно?
Время программера - главная ценность Креативность
Рутинные задачи
Кодогенерация
Скука
Saturday, April 21, 2012
Почему это важно?
Время программера - главная ценность Креативность
Рутинные задачи
Кодогенерация
Скука
Saturday, April 21, 2012
Почему это важно?
Время программера - главная ценность Креативность
Рутинные задачи
Кодогенерация
Скука
?
Saturday, April 21, 2012
Анатомия проекта
Saturday, April 21, 2012
Анатомия проекта
Каркас (ZF, Symfony, Yii)
Saturday, April 21, 2012
Анатомия проекта
Каркас (ZF, Symfony, Yii)
Батарейки (Doctrine, Twig, Buzz
etc)
Saturday, April 21, 2012
Анатомия проекта
Каркас (ZF, Symfony, Yii)
Батарейки (Doctrine, Twig, Buzz
etc)
Наш код
Saturday, April 21, 2012
Анатомия проекта
Каркас (ZF, Symfony, Yii)
Батарейки (Doctrine, Twig, Buzz
etc)
Наш код
Нетривиальный код
Saturday, April 21, 2012
Анатомия проекта
Каркас (ZF, Symfony, Yii)
Батарейки (Doctrine, Twig, Buzz
etc)
Наш код
Нетривиальный код
Рутинный/скучный код
Saturday, April 21, 2012
Качество кода
Generated code sucks!!!
Saturday, April 21, 2012
Качество кода
Generated code sucks!!!
Дадагой ддуг....
Saturday, April 21, 2012
Качество кода
Ты сам пишешь генератор кода.Сгенерированный код будет настолько хорош, насколько хорош созданный тобой генератор.
Generated code sucks!!!
Saturday, April 21, 2012
Кодогенерация и DSL
DSL DSL
DSL General Purpose Language
Saturday, April 21, 2012
DSLs + Code Generation
Saturday, April 21, 2012
ПримерыГенерация сущностей
Генерация форм из модели
SASS, LESS (CSS compiling/transforming)
JavaScript Generation
Оптимизация, преобразование, скаффолдинг
Генерация промежуточного DSL
тысячи их...
Saturday, April 21, 2012
Итак, что дает CG..
Saturday, April 21, 2012
Итак, что дает CG..
Качество / Quality
Saturday, April 21, 2012
Итак, что дает CG..
Качество / Quality
Согласованность / Consistency
Saturday, April 21, 2012
Итак, что дает CG..
Качество / Quality
Согласованность / Consistency
Don’t Repeat Yourself (DRY)
Saturday, April 21, 2012
Итак, что дает CG..
Качество / Quality
Согласованность / Consistency
Don’t Repeat Yourself (DRY)
Скорость разработки
Saturday, April 21, 2012
Резюмируя..
Work Harder
Saturday, April 21, 2012
Резюмируя..
Work Harder
Saturday, April 21, 2012
Резюмируя..
Work Harder Work Smarter
Saturday, April 21, 2012
Обзор инструментовSaturday, April 21, 2012
RoR 3
Очень качественная реализация Упор на пассивные генераторы
Экономят кучу времениBoilerplate code Отличная расширяемость
Saturday, April 21, 2012
RoR 3
rails new rails generate rake
Очень качественная реализация Упор на пассивные генераторы
Экономят кучу времениBoilerplate code Отличная расширяемость
Saturday, April 21, 2012
Django
Другая философияУ тебя есть инструменты для
простого решения задачи, но задачи (включая рутинные) ты будешь
решать сам.
Saturday, April 21, 2012
Django
Другая философияУ тебя есть инструменты для
простого решения задачи, но задачи (включая рутинные) ты будешь
решать сам.
Admin App
Saturday, April 21, 2012
Django
Другая философияУ тебя есть инструменты для
простого решения задачи, но задачи (включая рутинные) ты будешь
решать сам.
Admin App Model Form
Saturday, April 21, 2012
Django
Другая философияУ тебя есть инструменты для
простого решения задачи, но задачи (включая рутинные) ты будешь
решать сам.
Admin App Model Form Generic Views
Saturday, April 21, 2012
Yii
Gii + giix
yiic shell generators
Saturday, April 21, 2012
Yii
Gii + giix
yiic shell generators генерация модели
CRUD/Scaffold
Saturday, April 21, 2012
Yii
Gii + giix supersedes yiic generators
web-based code generation
yiic shell generators генерация модели
CRUD/Scaffold
Saturday, April 21, 2012
Symfony2
app/console
Saturday, April 21, 2012
Symfony2
app/console
Создан на базе (замечательного) компонента Console
Легко создавать расширения
Отличная поддержка Doctrine2
CRUD, Entities, Entity, Form
Assets (styles, scripts) management
Saturday, April 21, 2012
CakePHP
cake bake
cake schema
Good interactive shells
Bakes Models, View, Controllers, Fixtures, UTs
Генерация схемы для быстрого (повторого) развертывания.
cake i18n Генерация .pot файлов
Saturday, April 21, 2012
CodeIgniter2
Saturday, April 21, 2012
Кодогенерация в ZF1Saturday, April 21, 2012
Zend_Tool_Framework
Действительно целый фреймворк
Manifest & MetaDataProviders
CLI Handling Loaders
Registry
Saturday, April 21, 2012
Zend_Tool_Framework
Действительно целый фреймворк
Manifest & MetaDataProviders
CLI Handling Loaders
RegistryTriumph of
over-engineering!
Saturday, April 21, 2012
Zend_Tool_Project
Куча провайдеров код которых будет использован
Module Controller DbTableViewProject
Saturday, April 21, 2012
Zend_Tool_Project
Triumph of over-engineering!
Context
Stateful
Куча провайдеров код которых будет использован
Module Controller DbTableViewProject
Saturday, April 21, 2012
Zend_Tool + zf.php
Фасад к Zend\Tool\Project\Provider
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
Zend_CodeGenerator
Генерация кода с использованием ОО-интерфейсов.
Refactored to Zend\Code\Generator
Планировался как general-purpose generator (SIC!!)
Good for what it is: PHP code generation
Saturday, April 21, 2012
Zend_Reflection
Расширяет PHP Reflection Refactored to Zend\Code\Reflection
Интроспеция файлов Анализ docblock-comments
Saturday, April 21, 2012
Кодогенерация в ZF2Saturday, April 21, 2012
Текущее состояние
Saturday, April 21, 2012
Текущее состояние
Zend\Tool
Saturday, April 21, 2012
Текущее состояние
Zend\Tool
Saturday, April 21, 2012
Текущее состояние
Zend\Tool
Zend\Tool\Project\Provider
Zend\Tool\Framework\System\Provider
Saturday, April 21, 2012
Текущее состояние
Zend\Tool
Zend\Tool\Project\Provider
Zend\Tool\Framework\System\Provider Zf2Tool module
Saturday, April 21, 2012
Текущее состояние
Zend\Tool
Zend\Tool\Project\Provider
Zend\Tool\Framework\System\Provider Zf2Tool module
Zend\Console Zend\Code
Saturday, April 21, 2012
Zend\Console
/Thinkscape/zf2-console-sandbox
/Thinkscape/zf2/tree/feature/console
Saturday, April 21, 2012
Zend\Console
/Thinkscape/zf2-console-sandbox
/Thinkscape/zf2/tree/feature/console
Routing Requests Adapters
Saturday, April 21, 2012
Zend\Code
Zend_CodeGenerator
Zend_Reflection
Saturday, April 21, 2012
Zend\Code
Zend_CodeGenerator
Zend_Reflection
Saturday, April 21, 2012
Zend\Code
ReflectionZend_CodeGenerator
Zend_Reflection
Saturday, April 21, 2012
Zend\Code
ReflectionZend_CodeGenerator
Zend_Reflection Scanner
Saturday, April 21, 2012
Zend\Code
ReflectionZend_CodeGenerator
Zend_Reflection Scanner
Annotation
Saturday, April 21, 2012
Zend\Code
ReflectionZend_CodeGenerator
Zend_Reflection
Generator
Scanner
Annotation
Saturday, April 21, 2012
zf2.php tool ???Saturday, April 21, 2012
zf2.php tool ???
RFC - Tool 2.0
Saturday, April 21, 2012
zf2.php tool ???
RFC - Tool 2.0 Будет активно обновляться
Saturday, April 21, 2012
zf2.php tool ???
RFC - Tool 2.0
Tabled on last IRC meeting
Thread in ML - go, write your opinion!!
Будет активно обновляться
Saturday, April 21, 2012
zf2.php tool ???
RFC - Tool 2.0
Tabled on last IRC meeting
Thread in ML - go, write your opinion!!
Ожидается дискуссия
Будет активно обновляться
Saturday, April 21, 2012
zf2.php tool ???
RFC - Tool 2.0
Часть модуля Zf2Tool
Tabled on last IRC meeting
Thread in ML - go, write your opinion!!
Ожидается дискуссия
Будет активно обновляться
Saturday, April 21, 2012
zf2.php tool ???
RFC - Tool 2.0
Часть модуля Zf2Tool
Tabled on last IRC meeting
Thread in ML - go, write your opinion!!
Ожидается дискуссия
How to package?
Будет активно обновляться
Saturday, April 21, 2012
Yada, yada (closing thoughts)
Saturday, April 21, 2012
3 things to take home..
Saturday, April 21, 2012
3 things to take home..
Give the proper respect to hand-coding
Saturday, April 21, 2012
3 things to take home..
Give the proper respect to hand-coding
Don’t be afraid of automatic code generation
Saturday, April 21, 2012
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
И последнее:
Contribute to ZF2
+100 Karma +100500 Skill +100 FUN
/zendframework/zf2
Saturday, April 21, 2012
Thanks!
/farazdagi
@farazdagi
Saturday, April 21, 2012