39
Эволюция ZF Виктор Фараздаги Senior Dev, 4C 4cinc.com

Эволюция ZF: архитектура, шаблоны, рефакторинг

Embed Size (px)

DESCRIPTION

Виктор Фараздаги Component Maintainer и Contributor ZF 2.0, 4C

Citation preview

Page 1: Эволюция ZF: архитектура, шаблоны, рефакторинг

Эволюция ZF

Виктор Фараздаги Senior Dev, 4C

4cinc.com

Page 2: Эволюция ZF: архитектура, шаблоны, рефакторинг

Кто?

Senior Dev at 4C

Component Maintainer и Contributor ZF2: Zend\OpenId Zend\Service\Amazon Zend\Service\Slideshare Zend\Queue

Один из разработчиков Phing

Начинающий подкастер (zftalk.dev@rpod)

Page 3: Эволюция ZF: архитектура, шаблоны, рефакторинг

О чем?

Архитектура ZF1 & ZF2 Принципы ОО Проектирования Шаблоны Проектирования В какую сторону рефакторим?

Page 4: Эволюция ZF: архитектура, шаблоны, рефакторинг

Для кого?

Если вы: Решили принять участие в

разработке ZF2 Серьезно используете ZF1 Интересуетесь ZF1 → ZF2

Page 5: Эволюция ZF: архитектура, шаблоны, рефакторинг

Для чего?

Лучшее понимание кода Лучшее понимание принципов Методологический анализ Просто интересно

Page 6: Эволюция ZF: архитектура, шаблоны, рефакторинг

Архитектура ZF (с высоты птичьего полета)

Page 7: Эволюция ZF: архитектура, шаблоны, рефакторинг

Вопросы? Вопросы!

Component Library vs Full-Stack Framework?

“Use At Will” Mantra Фреймворк чрезмерно раздут? Масштабируемый?

Надежный? Расширяемый?

Page 8: Эволюция ZF: архитектура, шаблоны, рефакторинг

ZF1 phploc

Кол-во строк (LOC): 935.006

Комментарии (CLOC): 437.052

Исполняемый код (NCLOC): 497.954

Интерфейсы: 238

Классы: 4496

Абстрактные: 386 (8.59%)

Конкретные: 4110 (91.41%)

Page 9: Эволюция ZF: архитектура, шаблоны, рефакторинг

ZF2 phploc

Кол-во строк (LOC): 443.737

Комментарии (CLOС): 209.767

Исполняемый код (NCLOC): 233.970

Пространства имен: 482

Интерфейсы: 243

Классы: 2.306

Абстрактные: 178 (7.72%)

Конкретные: 2.128 (92.28%)

Page 10: Эволюция ZF: архитектура, шаблоны, рефакторинг

ZF 1 / ZF 2 LOCs

LOC CLOC NCLOC

0

100000

200000

300000

400000

500000

600000

700000

800000

900000

1000000

ZF 1ZF 2

Page 11: Эволюция ZF: архитектура, шаблоны, рефакторинг

ZF 1 / ZF 2 Классы

NSs Interfaces Classes Abstract Concrete

0

500

1000

1500

2000

2500

3000

3500

4000

4500

5000

ZF 1ZF 2

Page 12: Эволюция ZF: архитектура, шаблоны, рефакторинг

Самый важный вывод?

~Твое участие в разработке ZF2

только приветствуется!

Page 13: Эволюция ZF: архитектура, шаблоны, рефакторинг

Пакетирование в ZF2

Более продуманая инфраструктура Решение на уровне фреймворка Легкая установка, откат, выбор версии PEAR и/или Pyrum Поддержка мета-пакетов (“MVC”,

“i18n” etc)

Page 14: Эволюция ZF: архитектура, шаблоны, рефакторинг

Словом..

ZF2 способствует продвижению принципа “использовать по желанию”

+Еще более дискретная компонентная структура

Page 15: Эволюция ZF: архитектура, шаблоны, рефакторинг

Принципы объектно-ориентированного

проектирования

Page 16: Эволюция ZF: архитектура, шаблоны, рефакторинг

Got problem?

Ригидность (rigidity) Хрупкость (fragility) Неподвижность (immobility) Вязкость (viscosity) Излишняя сложность (needless complexity) Излишнее дублирование (needless repetition) Непрозначность (opacity)

Page 17: Эволюция ZF: архитектура, шаблоны, рефакторинг

S.O.L.I.D.

SRP Single Responsibility Principle

OCP Open/Closed Principle

LSP Liskov Substitution Principle

ISP Interface Segregation Principle

DIP Dependency Inversion Principle

Page 18: Эволюция ZF: архитектура, шаблоны, рефакторинг

Банда Четырех (GoF)

Page 19: Эволюция ZF: архитектура, шаблоны, рефакторинг

Шаблоны

Façade Singleton Iterator Strategy Observer

Template Method Factory Method Decorator Adapter

Page 20: Эволюция ZF: архитектура, шаблоны, рефакторинг

Фасад (Façade)

Разбиение подсистем

на слои

Развязка зависимостей

Упрощение интерфейса

Page 21: Эволюция ZF: архитектура, шаблоны, рефакторинг

Фасад (Façade)

Сторонние библиотеки Унаследованный код Zend_Application

Zend_Db Zend_Auth Zend_OpenId …

Page 22: Эволюция ZF: архитектура, шаблоны, рефакторинг

Façade After-talk

Façade vs Adapter Façade vs Mediator Façade + Abstract Factory Façade + Singleton

Page 23: Эволюция ZF: архитектура, шаблоны, рефакторинг

Одиночка (Singleton)

Правомерноть сингулярности Pattern vs Anti-Pattern? Примеры:

Zend_Auth

Zend_Registry

Zend_Controller_Front

Page 24: Эволюция ZF: архитектура, шаблоны, рефакторинг

Итератор (Iterator)

Полагайтесь на SPL Traversable, Iterator,

IteratorAggregate SPL: OuterIterator,

RecursiveIterator, SeekableIterator

Zend_Feed на итераторах

Page 25: Эволюция ZF: архитектура, шаблоны, рефакторинг

Итератор (Iterator)

Интерфейсы итераторов в SPL:

Page 26: Эволюция ZF: архитектура, шаблоны, рефакторинг

Стратегия (Strategy)

Strategy vs Bridge Zend_Filter, Zend_Validate

Page 27: Эволюция ZF: архитектура, шаблоны, рефакторинг

Стратегия (Strategy)

Page 28: Эволюция ZF: архитектура, шаблоны, рефакторинг

Наблюдатель (Observer)

Push model vs Pull model

Page 29: Эволюция ZF: архитектура, шаблоны, рефакторинг

Наблюдатель (Observer)

Интерфейс определен в SPL SplSubject + SplObserver

Page 30: Эволюция ZF: архитектура, шаблоны, рефакторинг

Фабричный Метод

Page 31: Эволюция ZF: архитектура, шаблоны, рефакторинг

Фабричный Метод

Отличительная черта: Creator создает себя.

Zend_Log

Page 32: Эволюция ZF: архитектура, шаблоны, рефакторинг

Grokking Factory Patterns

Фабрики бывают разные... Factory Method Abstract Factory Simple Factory Idiom Creational Methods Static Factory Method

Page 33: Эволюция ZF: архитектура, шаблоны, рефакторинг

Шаблонный Метод

Factory Method & Template Method

Page 34: Эволюция ZF: архитектура, шаблоны, рефакторинг

Декоратор (Decorator)

Zend_Form_Decorator_*

!!! НЕ РЕАЛИЗУЮТ шаблон Декоратор !!!

Page 35: Эволюция ZF: архитектура, шаблоны, рефакторинг

Адаптер (Adapter)

Продолжение идеи полиморфизма Множественное наследование Примеры: Tool, Auth, Db, Http, Queue

Page 36: Эволюция ZF: архитектура, шаблоны, рефакторинг

Adapter vs Bridge

Page 37: Эволюция ZF: архитектура, шаблоны, рефакторинг

Планы по Рефакторингу

Больше, чем просто рефакторинг PHP 5.3 Компонентная модель Производительность Контрактное программирование DI & IoC Ready

Page 38: Эволюция ZF: архитектура, шаблоны, рефакторинг

Планы по Рефакторингу

Следование принципам SOLID Чуть меньше магии Предсказуемые APIs Легкость сопровождения (добавить то, что нужно ВАМ)

Page 39: Эволюция ZF: архитектура, шаблоны, рефакторинг

THE END