Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Эволюция ZF
Виктор
Фараздаги
Senior Dev, 4C
4cinc.com
Кто?

Senior Dev at 4C

Component Maintainer и Contributor ZF2:
ZendOpenId
ZendServiceAmazon
ZendServiceSlideshare
ZendQueue

Один из разработчиков 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 1
ZF 2
ZF 1 / ZF 2 Классы
NSs Interfaces Classes Abstract Concrete
0
500
1000
1500
2000
2500
3000
3500
4000
4500
5000
ZF 1
ZF 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

More Related Content

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