Code Generation in ZF2

Preview:

DESCRIPTION

Overview of current tools and future of Zend Framework zf tool.

Citation preview

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

Recommended