Эволюция zf: архитектура, шаблоны, рефакторинг
DESCRIPTION
Виктор Фараздаги Component Maintainer и Contributor ZF 2.0, 4CTRANSCRIPT
![Page 1: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/1.jpg)
Эволюция ZF
Виктор Фараздаги Senior Dev, 4C
4cinc.com
![Page 2: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/2.jpg)
Кто?
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: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/3.jpg)
О чем?
Архитектура ZF1 & ZF2 Принципы ОО Проектирования Шаблоны Проектирования В какую сторону рефакторим?
![Page 4: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/4.jpg)
Для кого?
Если вы: Решили принять участие в
разработке ZF2 Серьезно используете ZF1 Интересуетесь ZF1 → ZF2
![Page 5: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/5.jpg)
Для чего?
Лучшее понимание кода Лучшее понимание принципов Методологический анализ Просто интересно
![Page 6: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/6.jpg)
Архитектура ZF (с высоты птичьего полета)
![Page 7: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/7.jpg)
Вопросы? Вопросы!
Component Library vs Full-Stack Framework?
“Use At Will” Mantra Фреймворк чрезмерно раздут? Масштабируемый?
Надежный? Расширяемый?
![Page 8: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/8.jpg)
ZF1 phploc
Кол-во строк (LOC): 935.006
Комментарии (CLOC): 437.052
Исполняемый код (NCLOC): 497.954
Интерфейсы: 238
Классы: 4496
Абстрактные: 386 (8.59%)
Конкретные: 4110 (91.41%)
![Page 9: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/9.jpg)
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: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/10.jpg)
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: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/11.jpg)
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: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/12.jpg)
Самый важный вывод?
~Твое участие в разработке ZF2
только приветствуется!
![Page 13: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/13.jpg)
Пакетирование в ZF2
Более продуманая инфраструктура Решение на уровне фреймворка Легкая установка, откат, выбор версии PEAR и/или Pyrum Поддержка мета-пакетов (“MVC”,
“i18n” etc)
![Page 14: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/14.jpg)
Словом..
ZF2 способствует продвижению принципа “использовать по желанию”
+Еще более дискретная компонентная структура
![Page 15: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/15.jpg)
Принципы объектно-ориентированного
проектирования
![Page 16: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/16.jpg)
Got problem?
Ригидность (rigidity) Хрупкость (fragility) Неподвижность (immobility) Вязкость (viscosity) Излишняя сложность (needless complexity) Излишнее дублирование (needless repetition) Непрозначность (opacity)
![Page 17: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/17.jpg)
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: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/18.jpg)
Банда Четырех (GoF)
![Page 19: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/19.jpg)
Шаблоны
Façade Singleton Iterator Strategy Observer
Template Method Factory Method Decorator Adapter
![Page 20: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/20.jpg)
Фасад (Façade)
Разбиение подсистем
на слои
Развязка зависимостей
Упрощение интерфейса
![Page 21: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/21.jpg)
Фасад (Façade)
Сторонние библиотеки Унаследованный код Zend_Application
Zend_Db Zend_Auth Zend_OpenId …
![Page 22: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/22.jpg)
Façade After-talk
Façade vs Adapter Façade vs Mediator Façade + Abstract Factory Façade + Singleton
![Page 23: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/23.jpg)
Одиночка (Singleton)
Правомерноть сингулярности Pattern vs Anti-Pattern? Примеры:
Zend_Auth
Zend_Registry
Zend_Controller_Front
![Page 24: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/24.jpg)
Итератор (Iterator)
Полагайтесь на SPL Traversable, Iterator,
IteratorAggregate SPL: OuterIterator,
RecursiveIterator, SeekableIterator
Zend_Feed на итераторах
![Page 25: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/25.jpg)
Итератор (Iterator)
Интерфейсы итераторов в SPL:
![Page 26: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/26.jpg)
Стратегия (Strategy)
Strategy vs Bridge Zend_Filter, Zend_Validate
![Page 27: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/27.jpg)
Стратегия (Strategy)
![Page 28: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/28.jpg)
Наблюдатель (Observer)
Push model vs Pull model
![Page 29: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/29.jpg)
Наблюдатель (Observer)
Интерфейс определен в SPL SplSubject + SplObserver
![Page 30: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/30.jpg)
Фабричный Метод
![Page 31: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/31.jpg)
Фабричный Метод
Отличительная черта: Creator создает себя.
Zend_Log
![Page 32: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/32.jpg)
Grokking Factory Patterns
Фабрики бывают разные... Factory Method Abstract Factory Simple Factory Idiom Creational Methods Static Factory Method
![Page 33: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/33.jpg)
Шаблонный Метод
Factory Method & Template Method
![Page 34: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/34.jpg)
Декоратор (Decorator)
Zend_Form_Decorator_*
!!! НЕ РЕАЛИЗУЮТ шаблон Декоратор !!!
![Page 35: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/35.jpg)
Адаптер (Adapter)
Продолжение идеи полиморфизма Множественное наследование Примеры: Tool, Auth, Db, Http, Queue
![Page 36: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/36.jpg)
Adapter vs Bridge
![Page 37: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/37.jpg)
Планы по Рефакторингу
Больше, чем просто рефакторинг PHP 5.3 Компонентная модель Производительность Контрактное программирование DI & IoC Ready
![Page 38: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/38.jpg)
Планы по Рефакторингу
Следование принципам SOLID Чуть меньше магии Предсказуемые APIs Легкость сопровождения (добавить то, что нужно ВАМ)
![Page 39: Эволюция ZF: архитектура, шаблоны, рефакторинг](https://reader031.vdocuments.net/reader031/viewer/2022020110/557ed0ccd8b42a815a8b457e/html5/thumbnails/39.jpg)
THE END