Upload
zfconfua
View
5.778
Download
4
Embed Size (px)
DESCRIPTION
Виктор Фараздаги Component Maintainer и Contributor ZF 2.0, 4C
Citation preview
Эволюция ZF
Виктор Фараздаги Senior Dev, 4C
4cinc.com
Кто?
Senior Dev at 4C
Component Maintainer и Contributor ZF2: Zend\OpenId Zend\Service\Amazon Zend\Service\Slideshare Zend\Queue
Один из разработчиков Phing
Начинающий подкастер (zftalk.dev@rpod)
О чем?
Архитектура ZF1 & ZF2 Принципы ОО Проектирования Шаблоны Проектирования В какую сторону рефакторим?
Для кого?
Если вы: Решили принять участие в
разработке ZF2 Серьезно используете ZF1 Интересуетесь ZF1 → ZF2
Для чего?
Лучшее понимание кода Лучшее понимание принципов Методологический анализ Просто интересно
Архитектура ZF (с высоты птичьего полета)
Вопросы? Вопросы!
Component Library vs Full-Stack Framework?
“Use At Will” Mantra Фреймворк чрезмерно раздут? Масштабируемый?
Надежный? Расширяемый?
ZF1 phploc
Кол-во строк (LOC): 935.006
Комментарии (CLOC): 437.052
Исполняемый код (NCLOC): 497.954
Интерфейсы: 238
Классы: 4496
Абстрактные: 386 (8.59%)
Конкретные: 4110 (91.41%)
ZF2 phploc
Кол-во строк (LOC): 443.737
Комментарии (CLOС): 209.767
Исполняемый код (NCLOC): 233.970
Пространства имен: 482
Интерфейсы: 243
Классы: 2.306
Абстрактные: 178 (7.72%)
Конкретные: 2.128 (92.28%)
ZF 1 / ZF 2 LOCs
LOC CLOC NCLOC
0
100000
200000
300000
400000
500000
600000
700000
800000
900000
1000000
ZF 1ZF 2
ZF 1 / ZF 2 Классы
NSs Interfaces Classes Abstract Concrete
0
500
1000
1500
2000
2500
3000
3500
4000
4500
5000
ZF 1ZF 2
Самый важный вывод?
~Твое участие в разработке ZF2
только приветствуется!
Пакетирование в ZF2
Более продуманая инфраструктура Решение на уровне фреймворка Легкая установка, откат, выбор версии PEAR и/или Pyrum Поддержка мета-пакетов (“MVC”,
“i18n” etc)
Словом..
ZF2 способствует продвижению принципа “использовать по желанию”
+Еще более дискретная компонентная структура
Принципы объектно-ориентированного
проектирования
Got problem?
Ригидность (rigidity) Хрупкость (fragility) Неподвижность (immobility) Вязкость (viscosity) Излишняя сложность (needless complexity) Излишнее дублирование (needless repetition) Непрозначность (opacity)
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
Банда Четырех (GoF)
Шаблоны
Façade Singleton Iterator Strategy Observer
Template Method Factory Method Decorator Adapter
Фасад (Façade)
Разбиение подсистем
на слои
Развязка зависимостей
Упрощение интерфейса
Фасад (Façade)
Сторонние библиотеки Унаследованный код Zend_Application
Zend_Db Zend_Auth Zend_OpenId …
Façade After-talk
Façade vs Adapter Façade vs Mediator Façade + Abstract Factory Façade + Singleton
Одиночка (Singleton)
Правомерноть сингулярности Pattern vs Anti-Pattern? Примеры:
Zend_Auth
Zend_Registry
Zend_Controller_Front
Итератор (Iterator)
Полагайтесь на SPL Traversable, Iterator,
IteratorAggregate SPL: OuterIterator,
RecursiveIterator, SeekableIterator
Zend_Feed на итераторах
Итератор (Iterator)
Интерфейсы итераторов в SPL:
Стратегия (Strategy)
Strategy vs Bridge Zend_Filter, Zend_Validate
Стратегия (Strategy)
Наблюдатель (Observer)
Push model vs Pull model
Наблюдатель (Observer)
Интерфейс определен в SPL SplSubject + SplObserver
Фабричный Метод
Фабричный Метод
Отличительная черта: Creator создает себя.
Zend_Log
Grokking Factory Patterns
Фабрики бывают разные... Factory Method Abstract Factory Simple Factory Idiom Creational Methods Static Factory Method
Шаблонный Метод
Factory Method & Template Method
Декоратор (Decorator)
Zend_Form_Decorator_*
!!! НЕ РЕАЛИЗУЮТ шаблон Декоратор !!!
Адаптер (Adapter)
Продолжение идеи полиморфизма Множественное наследование Примеры: Tool, Auth, Db, Http, Queue
Adapter vs Bridge
Планы по Рефакторингу
Больше, чем просто рефакторинг PHP 5.3 Компонентная модель Производительность Контрактное программирование DI & IoC Ready
Планы по Рефакторингу
Следование принципам SOLID Чуть меньше магии Предсказуемые APIs Легкость сопровождения (добавить то, что нужно ВАМ)
THE END