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

Preview:

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

Recommended