code generation in zf2

107
ZF2 Code Generation или почему лучше день потерять , а потом за 5мин. долететь Saturday, April 21, 2012

Upload: victor-farazdagi

Post on 02-Jul-2015

1.574 views

Category:

Documents


2 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Code Generation in ZF2

ZF2 Code Generationили почему лучше день потерять, а потом за 5мин. долететь

Saturday, April 21, 2012

Page 2: Code Generation in ZF2

Об авторе

Phrozn - phrozn.info

zftalk.dev - zfcasts.ru

Phing Contributor

ZF Evangelist & Contributor

Victor Farazdagi

/farazdagi

@farazdagi

Saturday, April 21, 2012

Page 3: Code Generation in ZF2

Список литературы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

Page 4: Code Generation in ZF2

Структура доклада

1.Определение концепции кодогенерации

2.Обзор существующих инструментов

3.Перспективы развития в ZF2

4.Выводы (честная попытка их сделать)

Saturday, April 21, 2012

Page 5: Code Generation in ZF2

ОБП

Saturday, April 21, 2012

Page 6: Code Generation in ZF2

ОБП

В ZF1 нет адекватного инструментария

Saturday, April 21, 2012

Page 7: Code Generation in ZF2

ОБП

В ZF1 нет адекватного инструментария

В ZF2 нет готового инструментария

Saturday, April 21, 2012

Page 8: Code Generation in ZF2

ОБП

В ZF1 нет адекватного инструментария

В ZF2 нет готового инструментария

Saturday, April 21, 2012

Page 9: Code Generation in ZF2

ОБП

Адекватного инструментария нет вообще

В ZF1 нет адекватного инструментария

В ZF2 нет готового инструментария

Saturday, April 21, 2012

Page 10: Code Generation in ZF2

Адекватного инструментария нет вообще

What??

Saturday, April 21, 2012

Page 11: Code Generation in ZF2

Адекватного инструментария нет вообще

What??

Saturday, April 21, 2012

Page 12: Code Generation in ZF2

Адекватного инструментария нет вообще

What??

Bitch, Pleeease *

* Дадагой ддуг, Вы ошибаетес!

Saturday, April 21, 2012

Page 13: Code Generation in ZF2

Адекватного инструментария нет вообще

What??

Bitch, Pleeease *

* Дадагой ддуг, Вы ошибаетес!

Saturday, April 21, 2012

Page 14: Code Generation in ZF2

Что это за зверь такой - Кодогенерация?

Saturday, April 21, 2012

Page 15: Code Generation in ZF2

Определение

Кодогенерация - процесс преобразования высокоуровневого (более абстрактного) кода в низкоуровневый (менее

абстрактный) код.

Процесс генерации кода обычно автоматизируют путем написания инструмента (Code Generator) для такого преобразования.

Абстрактное представление

Менее абстрактное представление

Saturday, April 21, 2012

Page 16: Code Generation in ZF2

Определение (прод.)

Кодогенерация - написание программ, которые пишут другие программы.

Исходный код Выходной кодCode

Generator

Saturday, April 21, 2012

Page 17: Code Generation in ZF2

Виды Генераторов Кода

Пассивные Генераторы Кода

Активные Генераторы Кода

Saturday, April 21, 2012

Page 18: Code Generation in ZF2

Виды Генераторов Кода

Пассивные Генераторы Кода

Активные Генераторы Кода

Save typing

Saturday, April 21, 2012

Page 19: Code Generation in ZF2

Виды Генераторов Кода

Пассивные Генераторы Кода

Активные Генераторы Кода

Save typing

Продвинутая шаблонизация

Saturday, April 21, 2012

Page 20: Code Generation in ZF2

Виды Генераторов Кода

Пассивные Генераторы Кода

Активные Генераторы Кода

Save typing

Продвинутая шаблонизация

Для создания артефактов

Saturday, April 21, 2012

Page 21: Code Generation in ZF2

Виды Генераторов Кода

Пассивные Генераторы Кода

Активные Генераторы Кода

Save typing

Продвинутая шаблонизация

Для создания артефактов

Design Smell

Saturday, April 21, 2012

Page 22: Code Generation in ZF2

Виды Генераторов Кода

Пассивные Генераторы Кода

Активные Генераторы Кода

Save typing

Продвинутая шаблонизация

Для создания артефактов

Design Smell

DRY

Saturday, April 21, 2012

Page 23: Code Generation in ZF2

Виды Генераторов Кода

Пассивные Генераторы Кода

Активные Генераторы Кода

Save typing

Продвинутая шаблонизация

Для создания артефактов

Design Smell

Отлично работает с CI

DRY

Saturday, April 21, 2012

Page 24: Code Generation in ZF2

Виды Генераторов Кода

Пассивные Генераторы Кода

Активные Генераторы Кода

Save typing

Продвинутая шаблонизация

Для создания артефактов

Design Smell

Отлично работает с CI

DRY

Дешевая (ре)генерация

Saturday, April 21, 2012

Page 25: Code Generation in ZF2

Почему это важно?

Saturday, April 21, 2012

Page 26: Code Generation in ZF2

Почему это важно?

Время программера - главная ценность

Saturday, April 21, 2012

Page 27: Code Generation in ZF2

Почему это важно?

Время программера - главная ценность Креативность

Saturday, April 21, 2012

Page 28: Code Generation in ZF2

Почему это важно?

Время программера - главная ценность Креативность

Рутинные задачи

Saturday, April 21, 2012

Page 29: Code Generation in ZF2

Почему это важно?

Время программера - главная ценность Креативность

Рутинные задачи

Кодогенерация

Saturday, April 21, 2012

Page 30: Code Generation in ZF2

Почему это важно?

Время программера - главная ценность Креативность

Рутинные задачи

Кодогенерация

Скука

Saturday, April 21, 2012

Page 31: Code Generation in ZF2

Почему это важно?

Время программера - главная ценность Креативность

Рутинные задачи

Кодогенерация

Скука

Saturday, April 21, 2012

Page 32: Code Generation in ZF2

Почему это важно?

Время программера - главная ценность Креативность

Рутинные задачи

Кодогенерация

Скука

Saturday, April 21, 2012

Page 33: Code Generation in ZF2

Почему это важно?

Время программера - главная ценность Креативность

Рутинные задачи

Кодогенерация

Скука

Saturday, April 21, 2012

Page 34: Code Generation in ZF2

Почему это важно?

Время программера - главная ценность Креативность

Рутинные задачи

Кодогенерация

Скука

Saturday, April 21, 2012

Page 35: Code Generation in ZF2

Почему это важно?

Время программера - главная ценность Креативность

Рутинные задачи

Кодогенерация

Скука

Saturday, April 21, 2012

Page 36: Code Generation in ZF2

Почему это важно?

Время программера - главная ценность Креативность

Рутинные задачи

Кодогенерация

Скука

?

Saturday, April 21, 2012

Page 37: Code Generation in ZF2

Анатомия проекта

Saturday, April 21, 2012

Page 38: Code Generation in ZF2

Анатомия проекта

Каркас (ZF, Symfony, Yii)

Saturday, April 21, 2012

Page 39: Code Generation in ZF2

Анатомия проекта

Каркас (ZF, Symfony, Yii)

Батарейки (Doctrine, Twig, Buzz

etc)

Saturday, April 21, 2012

Page 40: Code Generation in ZF2

Анатомия проекта

Каркас (ZF, Symfony, Yii)

Батарейки (Doctrine, Twig, Buzz

etc)

Наш код

Saturday, April 21, 2012

Page 41: Code Generation in ZF2

Анатомия проекта

Каркас (ZF, Symfony, Yii)

Батарейки (Doctrine, Twig, Buzz

etc)

Наш код

Нетривиальный код

Saturday, April 21, 2012

Page 42: Code Generation in ZF2

Анатомия проекта

Каркас (ZF, Symfony, Yii)

Батарейки (Doctrine, Twig, Buzz

etc)

Наш код

Нетривиальный код

Рутинный/скучный код

Saturday, April 21, 2012

Page 43: Code Generation in ZF2

Качество кода

Generated code sucks!!!

Saturday, April 21, 2012

Page 44: Code Generation in ZF2

Качество кода

Generated code sucks!!!

Дадагой ддуг....

Saturday, April 21, 2012

Page 45: Code Generation in ZF2

Качество кода

Ты сам пишешь генератор кода.Сгенерированный код будет настолько хорош, насколько хорош созданный тобой генератор.

Generated code sucks!!!

Saturday, April 21, 2012

Page 46: Code Generation in ZF2

Кодогенерация и DSL

DSL DSL

DSL General Purpose Language

Saturday, April 21, 2012

Page 47: Code Generation in ZF2

DSLs + Code Generation

Saturday, April 21, 2012

Page 48: Code Generation in ZF2

ПримерыГенерация сущностей

Генерация форм из модели

SASS, LESS (CSS compiling/transforming)

JavaScript Generation

Оптимизация, преобразование, скаффолдинг

Генерация промежуточного DSL

тысячи их...

Saturday, April 21, 2012

Page 49: Code Generation in ZF2

Итак, что дает CG..

Saturday, April 21, 2012

Page 50: Code Generation in ZF2

Итак, что дает CG..

Качество / Quality

Saturday, April 21, 2012

Page 51: Code Generation in ZF2

Итак, что дает CG..

Качество / Quality

Согласованность / Consistency

Saturday, April 21, 2012

Page 52: Code Generation in ZF2

Итак, что дает CG..

Качество / Quality

Согласованность / Consistency

Don’t Repeat Yourself (DRY)

Saturday, April 21, 2012

Page 53: Code Generation in ZF2

Итак, что дает CG..

Качество / Quality

Согласованность / Consistency

Don’t Repeat Yourself (DRY)

Скорость разработки

Saturday, April 21, 2012

Page 54: Code Generation in ZF2

Резюмируя..

Work Harder

Saturday, April 21, 2012

Page 55: Code Generation in ZF2

Резюмируя..

Work Harder

Saturday, April 21, 2012

Page 56: Code Generation in ZF2

Резюмируя..

Work Harder Work Smarter

Saturday, April 21, 2012

Page 57: Code Generation in ZF2

Обзор инструментовSaturday, April 21, 2012

Page 58: Code Generation in ZF2

RoR 3

Очень качественная реализация Упор на пассивные генераторы

Экономят кучу времениBoilerplate code Отличная расширяемость

Saturday, April 21, 2012

Page 59: Code Generation in ZF2

RoR 3

rails new rails generate rake

Очень качественная реализация Упор на пассивные генераторы

Экономят кучу времениBoilerplate code Отличная расширяемость

Saturday, April 21, 2012

Page 60: Code Generation in ZF2

Django

Другая философияУ тебя есть инструменты для

простого решения задачи, но задачи (включая рутинные) ты будешь

решать сам.

Saturday, April 21, 2012

Page 61: Code Generation in ZF2

Django

Другая философияУ тебя есть инструменты для

простого решения задачи, но задачи (включая рутинные) ты будешь

решать сам.

Admin App

Saturday, April 21, 2012

Page 62: Code Generation in ZF2

Django

Другая философияУ тебя есть инструменты для

простого решения задачи, но задачи (включая рутинные) ты будешь

решать сам.

Admin App Model Form

Saturday, April 21, 2012

Page 63: Code Generation in ZF2

Django

Другая философияУ тебя есть инструменты для

простого решения задачи, но задачи (включая рутинные) ты будешь

решать сам.

Admin App Model Form Generic Views

Saturday, April 21, 2012

Page 64: Code Generation in ZF2

Yii

Gii + giix

yiic shell generators

Saturday, April 21, 2012

Page 65: Code Generation in ZF2

Yii

Gii + giix

yiic shell generators генерация модели

CRUD/Scaffold

Saturday, April 21, 2012

Page 66: Code Generation in ZF2

Yii

Gii + giix supersedes yiic generators

web-based code generation

yiic shell generators генерация модели

CRUD/Scaffold

Saturday, April 21, 2012

Page 67: Code Generation in ZF2

Symfony2

app/console

Saturday, April 21, 2012

Page 68: Code Generation in ZF2

Symfony2

app/console

Создан на базе (замечательного) компонента Console

Легко создавать расширения

Отличная поддержка Doctrine2

CRUD, Entities, Entity, Form

Assets (styles, scripts) management

Saturday, April 21, 2012

Page 69: Code Generation in ZF2

CakePHP

cake bake

cake schema

Good interactive shells

Bakes Models, View, Controllers, Fixtures, UTs

Генерация схемы для быстрого (повторого) развертывания.

cake i18n Генерация .pot файлов

Saturday, April 21, 2012

Page 70: Code Generation in ZF2

CodeIgniter2

Saturday, April 21, 2012

Page 71: Code Generation in ZF2

Кодогенерация в ZF1Saturday, April 21, 2012

Page 72: Code Generation in ZF2

Zend_Tool_Framework

Действительно целый фреймворк

Manifest & MetaDataProviders

CLI Handling Loaders

Registry

Saturday, April 21, 2012

Page 73: Code Generation in ZF2

Zend_Tool_Framework

Действительно целый фреймворк

Manifest & MetaDataProviders

CLI Handling Loaders

RegistryTriumph of

over-engineering!

Saturday, April 21, 2012

Page 74: Code Generation in ZF2

Zend_Tool_Project

Куча провайдеров код которых будет использован

Module Controller DbTableViewProject

Saturday, April 21, 2012

Page 75: Code Generation in ZF2

Zend_Tool_Project

Triumph of over-engineering!

Context

Stateful

Куча провайдеров код которых будет использован

Module Controller DbTableViewProject

Saturday, April 21, 2012

Page 76: Code Generation in ZF2

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

Page 77: Code Generation in ZF2

Zend_CodeGenerator

Генерация кода с использованием ОО-интерфейсов.

Refactored to Zend\Code\Generator

Планировался как general-purpose generator (SIC!!)

Good for what it is: PHP code generation

Saturday, April 21, 2012

Page 78: Code Generation in ZF2

Zend_Reflection

Расширяет PHP Reflection Refactored to Zend\Code\Reflection

Интроспеция файлов Анализ docblock-comments

Saturday, April 21, 2012

Page 79: Code Generation in ZF2

Кодогенерация в ZF2Saturday, April 21, 2012

Page 80: Code Generation in ZF2

Текущее состояние

Saturday, April 21, 2012

Page 81: Code Generation in ZF2

Текущее состояние

Zend\Tool

Saturday, April 21, 2012

Page 82: Code Generation in ZF2

Текущее состояние

Zend\Tool

Saturday, April 21, 2012

Page 83: Code Generation in ZF2

Текущее состояние

Zend\Tool

Zend\Tool\Project\Provider

Zend\Tool\Framework\System\Provider

Saturday, April 21, 2012

Page 84: Code Generation in ZF2

Текущее состояние

Zend\Tool

Zend\Tool\Project\Provider

Zend\Tool\Framework\System\Provider Zf2Tool module

Saturday, April 21, 2012

Page 85: Code Generation in ZF2

Текущее состояние

Zend\Tool

Zend\Tool\Project\Provider

Zend\Tool\Framework\System\Provider Zf2Tool module

Zend\Console Zend\Code

Saturday, April 21, 2012

Page 86: Code Generation in ZF2

Zend\Console

/Thinkscape/zf2-console-sandbox

/Thinkscape/zf2/tree/feature/console

Saturday, April 21, 2012

Page 87: Code Generation in ZF2

Zend\Console

/Thinkscape/zf2-console-sandbox

/Thinkscape/zf2/tree/feature/console

Routing Requests Adapters

Saturday, April 21, 2012

Page 88: Code Generation in ZF2

Zend\Code

Zend_CodeGenerator

Zend_Reflection

Saturday, April 21, 2012

Page 89: Code Generation in ZF2

Zend\Code

Zend_CodeGenerator

Zend_Reflection

Saturday, April 21, 2012

Page 90: Code Generation in ZF2

Zend\Code

ReflectionZend_CodeGenerator

Zend_Reflection

Saturday, April 21, 2012

Page 91: Code Generation in ZF2

Zend\Code

ReflectionZend_CodeGenerator

Zend_Reflection Scanner

Saturday, April 21, 2012

Page 92: Code Generation in ZF2

Zend\Code

ReflectionZend_CodeGenerator

Zend_Reflection Scanner

Annotation

Saturday, April 21, 2012

Page 93: Code Generation in ZF2

Zend\Code

ReflectionZend_CodeGenerator

Zend_Reflection

Generator

Scanner

Annotation

Saturday, April 21, 2012

Page 94: Code Generation in ZF2

zf2.php tool ???Saturday, April 21, 2012

Page 95: Code Generation in ZF2

zf2.php tool ???

RFC - Tool 2.0

Saturday, April 21, 2012

Page 96: Code Generation in ZF2

zf2.php tool ???

RFC - Tool 2.0 Будет активно обновляться

Saturday, April 21, 2012

Page 97: Code Generation in ZF2

zf2.php tool ???

RFC - Tool 2.0

Tabled on last IRC meeting

Thread in ML - go, write your opinion!!

Будет активно обновляться

Saturday, April 21, 2012

Page 98: Code Generation in ZF2

zf2.php tool ???

RFC - Tool 2.0

Tabled on last IRC meeting

Thread in ML - go, write your opinion!!

Ожидается дискуссия

Будет активно обновляться

Saturday, April 21, 2012

Page 99: Code Generation in ZF2

zf2.php tool ???

RFC - Tool 2.0

Часть модуля Zf2Tool

Tabled on last IRC meeting

Thread in ML - go, write your opinion!!

Ожидается дискуссия

Будет активно обновляться

Saturday, April 21, 2012

Page 100: Code Generation in ZF2

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

Page 101: Code Generation in ZF2

Yada, yada (closing thoughts)

Saturday, April 21, 2012

Page 102: Code Generation in ZF2

3 things to take home..

Saturday, April 21, 2012

Page 103: Code Generation in ZF2

3 things to take home..

Give the proper respect to hand-coding

Saturday, April 21, 2012

Page 104: Code Generation in ZF2

3 things to take home..

Give the proper respect to hand-coding

Don’t be afraid of automatic code generation

Saturday, April 21, 2012

Page 105: Code Generation in ZF2

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

Page 106: Code Generation in ZF2

И последнее:

Contribute to ZF2

+100 Karma +100500 Skill +100 FUN

/zendframework/zf2

Saturday, April 21, 2012

Page 107: Code Generation in ZF2

Thanks!

/farazdagi

@farazdagi

Saturday, April 21, 2012