Встречайте zend framework 2.0

50
Zend Framework 2.0 Alexander Veremyev [email protected] ZF Core team

Upload: zfconfua

Post on 05-Dec-2014

11.716 views

Category:

Technology


1 download

DESCRIPTION

Александр Веремьев Zend Framework Core Team, Zend Technologies

TRANSCRIPT

Page 1: Встречайте Zend Framework 2.0

Zend Framework 2.0

Alexander Veremyev

[email protected]

ZF Core team

Page 2: Встречайте Zend Framework 2.0

ZF2 related ресурсы

Page 3: Встречайте Zend Framework 2.0

Ресурсы, посвященные ZF2:http://framework.zend.com/

-> Community

-> Resources

-> Wiki

-> ZFDEV2

http://framework.zend.com/wiki/display/ZFDEV2/Home

Page 4: Встречайте Zend Framework 2.0
Page 5: Встречайте Zend Framework 2.0
Page 6: Встречайте Zend Framework 2.0
Page 7: Встречайте Zend Framework 2.0
Page 8: Встречайте Zend Framework 2.0

Ресурсы, посвященные ZF2:http://framework.zend.com/

-> Community -> Resources -> Wiki -> ZFDEV2

http://framework.zend.com/wiki/display/ZFDEV2/Home

irc://freenode/#zftalk.devirc://freenode/#zftalk-community

[email protected]

Page 9: Встречайте Zend Framework 2.0

Ресурсы, посвященные ZF2:

git://git.zendframework.com/zf.gitgit://github.com/zendframework/zf2.git

https://github.com/zendframework/zf2

https://github.com/zendframework/zf2/blob/master/README-GIT.txt

Page 10: Встречайте Zend Framework 2.0
Page 11: Встречайте Zend Framework 2.0
Page 12: Встречайте Zend Framework 2.0

Изменения в ZF2.

Page 13: Встречайте Zend Framework 2.0

Изменения в ZF2.

Почему нужны какие-то изменения?

Что не устраивает в 1.x?

1. Слишком много путей делать одни и те же вещи.

2. Сложность в изучении.

3. Неудовлетворительная производительность.

Page 14: Встречайте Zend Framework 2.0

Изменения в ZF2:

1. Namespaces

2. Процедура autoloading’а и загрузки плагинов

3. Типизация Exceptions.

4. Тестирование.

5. MVC

6. Унификация документации.

Page 15: Встречайте Zend Framework 2.0

Namespaces

Page 16: Встречайте Zend Framework 2.0

Для чего сделан перевод на Namespaces:

1. Удобно для пользователей.

Page 17: Встречайте Zend Framework 2.0

$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);$service = new Zend_Gdata_Calendar($client);$listFeed = $service->getCalendarListFeed();

use Zend\Gdata;$service = Gdata\Calendar::AUTH_SERVICE_NAME;$client = Gdata\ClientLogin::getHttpClient($user, $pass, $service);$service = new Gdata\Calendar($client);$listFeed = $service->getCalendarListFeed();

Page 18: Встречайте Zend Framework 2.0

Для чего сделан перевод на Namespaces:

1. Удобно для пользователей.

2. Удобно внутри ZF, упрощает код, облегчает поддержку.

Page 19: Встречайте Zend Framework 2.0

Перевод на Namespaces:

весна 2010

Page 20: Встречайте Zend Framework 2.0

ZF 2.0 Requirementshttp://framework.zend.com/wiki/display/ZFDEV2/Zend+Framework+2.0+Requirements

Page 21: Встречайте Zend Framework 2.0

Перевод на Namespaces производился в полуавтоматическом режиме:

https://github.com/ralphschindler/PHPTools

https://github.com/zendframework/zf2/tree/master/working/

working/BC-Breaks.txt

working/PHPNamespacer-MappedClasses.xml

Page 22: Встречайте Zend Framework 2.0

Особенности: отсутствие стандарта на использование namespaces в docblocks.

namespace Zend\Tool\Framework\Client\Console;use Zend\Tool\Framework\Registry;class ArgumentParser implements RegistryEnabled { /** * setRegistry() * * @param \Zend\Tool\Framework\Registry $registry * @return \Zend\Tool\Framework\Client\Console\ArgumentParser */ public function setRegistry(Registry $registry) { // ... return $this; }}

Page 23: Встречайте Zend Framework 2.0

PHPNamespacer-MappedClasses.xml

<?xml version="1.0"?><mappedClasses libraryDirectory="../library/">...<mappedClass> <originalRelativeFilePath>Zend/Amf/Parse/Amf3/Deserializer.php</originalRelativeFilePath> <originalClassName>Zend_Amf_Parse_Amf3_Deserializer</originalClassName> <newRelativeFilePath>Zend/AMF/Parser/AMF3/Deserializer.php</newRelativeFilePath> <newNamespace>Zend\AMF\Parser\AMF3</newNamespace> <newClassName>Deserializer</newClassName> <newFullyQualifiedName>Zend\AMF\Parser\AMF3\Deserializer</newFullyQualifiedName></mappedClass>...</mappedClasses>

Page 24: Встречайте Zend Framework 2.0

Проблемы с зарезервированными словами.

interface Zend_Server_Interfaceabstract class Zend_CodeGenerator_Abstract

=>

namespace Zend\Server;interface Server

namespace Zend\CodeGenerator;abstract class AbstractCodeGenerator

Page 25: Встречайте Zend Framework 2.0

Использование интерфейсов.interface Adapter { public function __construct($options, Queue $queue = null); public function getQueue(); public function setQueue(Queue $queue); // ...}abstract class AbstractAdapter implements Adapter { // ...}class ArrayAdapter extends AbstractAdapter { /* ... */ }class Db extends AbstractAdapter { /* ... */ }// ....class Queue implements \Countable { /** * Set the adapter for this queue * * @param string|\Zend\Queue\Adapter $adapter * @return \Zend\Queue\Queue Provides a fluent interface */ public function setAdapter($adapter) {}}

Page 26: Встречайте Zend Framework 2.0

Вопрос актуальности PHPNamespacer-MappedClasses.php:

???

Проблема - сохранялась ли актуальность при слиянии fixes и новой функциональности из 1.x

Page 27: Встречайте Zend Framework 2.0

Autoloading &Plugin Loading

Page 28: Встречайте Zend Framework 2.0

Что не удовлетворяет в autoloading’е ZF 1.x:http://framework.zend.com/wiki/display/ZFDEV2/Proposal+For+Autoloading+In+ZF2

1. Сложности с использованием include_path.

2. Чем глубже ZF library каталог в include_path, тем медленнее loading.

3. Не поддерживает системы, где присутствуют связи отличающиеся от 1:1.

4. Проблемы с производительностью даже при применении байткод кэширования.

5. Не позволяет просто работать с архитектурами, где компоненты могут быть инсталлированны в индивидуальные поддеревья.

Page 29: Встречайте Zend Framework 2.0

Standard Autoloader:http://framework.zend.com/wiki/display/ZFDEV2/Proposal+For+Autoloading+In+ZF2

Page 30: Встречайте Zend Framework 2.0

Standard Autoloader:http://framework.zend.com/wiki/display/ZFDEV2/Proposal+For+Autoloading+In+ZF2

Page 31: Встречайте Zend Framework 2.0

Classmap Autoloader:http://framework.zend.com/wiki/display/ZFDEV2/Proposal+For+Autoloading+In+ZF2

bin/classmap_generator.php

Page 32: Встречайте Zend Framework 2.0

Plugin loading ZF 1.x:http://framework.zend.com/wiki/display/ZFDEV2/Proposal+for+Plugin+Loading+in+ZF2

1. Plugin loader используется не везде, где следует.

2. Часть функциональности дублируется в классах, использующих plugin loader.

3. Проблемы с case sensitivity.

4. Производительность!!!

Page 33: Встречайте Zend Framework 2.0

Exceptions

Page 34: Встречайте Zend Framework 2.0

Exceptions в ZF 1.x:a) Один exception класс на компоненту.

b) Все исключения отнаследованы от Zend_Exception, что затрудняет дальнейшую типизацию Exception'ов.

PHP Standards working group meeting (2009),планируемое решение для PEAR:a) Каждая компонента содержит интерфейс-маркер Exception

b) Различные exception классы компоненты декларируются как имплементирующие указанный интерфейс-маркер, при этом они наследуют \Exception класс или какой-либо более специализированный SPL exception класс.

Page 35: Встречайте Zend Framework 2.0

SPL exceptions:http://www.php.net/manual/en/spl.exceptions.php

BadFunctionCallExceptionBadMethodCallExceptionDomainExceptionInvalidArgumentExceptionLengthExceptionLogicExceptionOutOfBoundsException

OutOfRangeExceptionOverflowExceptionRangeExceptionRuntimeExceptionUnderflowExceptionUnexpectedValueException

Page 36: Встречайте Zend Framework 2.0

Структура файлов внутри компоненты, пример.

Mustache|-- _autoload.php|-- Exception| |-- DomainException.php| |-- InvalidArgumentException.php| |-- InvalidStateException.php| |-- TemplateNotFoundException.php|-- Exception.php|-- Lexer.php|-- Mustache.php|-- MustacheException.php|-- Pragma| |-- AbstractPragma.php| `-- ImplicitIterator.php|-- Pragma.php`-- Renderer.php

Page 37: Встречайте Zend Framework 2.0

Пример работы с Exceptions в ZF2

Page 38: Встречайте Zend Framework 2.0

Тестирование

Page 39: Встречайте Zend Framework 2.0

Проблемы unit тестов в ZF 1.x:1. Permissions (при распространении ZF в составе

некоторых Linux дистрибутивов).

2. Служебные классы "живущие" вместе с тестами.

3. Обычно не-PHP файлы (конфиги, ...) расположены в _files. Тем не менее, это требует review для каждой компоненты в отдельности.

4. Вопросы возможности запуска тестов в параллельном режиме.

5. Ресурсоемкость.

6. Нет возможности запуска по списку зависимости компонент.

Page 40: Встречайте Zend Framework 2.0

MVC

Page 41: Встречайте Zend Framework 2.0

Controller Layer:1. Сложно в изучении.

2. Используются некоторые "анти-паттерны":– Zend_Controller_Front является синглетоном;

– Helper broker доступен только через protected члены класса => проблемы с injecting.…

1. Многие неотъемлемые части реализации вызывают падение производительности.

2. Сложности с созданием модульного приложения (недостаточность примеров + особенности реализации).

3. Возможность выполнения нескольких actions - сомнительная feature.

4. Error handling.

5. Возможность остановить обработку и немедленно передать response.

Page 42: Встречайте Zend Framework 2.0

View Layer:1. Слишком много ответственностей: отслеживание переменных,

фильтров, хелперов, поиск и рендеринг скриптов.

2. Загрузка helpers - очень узкое место в производительности по причине overloading и подгружаемости плагинов.

3. Система хэлперов сложна для новых пользователей ("где метод doctype() определен?! Какие параметры он принимает на вход?!")

4. View могут использовать только PHP скрипты, отсутствуют приспособления для подгружаемости views откуда-либо еще (db, web services, ...).

5. Layouts представлены в системе, но не обеспечивают возможностей, кроме как рендеринга нового view.

Page 43: Встречайте Zend Framework 2.0

Forms в ZF 1.x:1. Form и subcomponents реализуют слишком много

ответственностей. Каждая компонента оперирует как минимум одним встроенным plugin loader’ом и обращается к этим loader'ам для работы с prefix paths.

2. Будучи доступны как отдельные объекты, указанные plugin loader'ы могли бы предоставить большую гибкость и улучшить производительность.

3. Использованный decorator pattern должен быть не частью объекта Form, а находиться во view layer'е, form объекты при этом должны быть инъецированы в decorator chains.

Page 44: Встречайте Zend Framework 2.0

Zend_Application:

1. Условное конфигурирование модулей в зависимости от текущего запроса.

2. Производительность чтения ресурсов.

Page 45: Встречайте Zend Framework 2.0

MVC performance:Текущую реализацию сложно оптимизировать.

http://www.slideshare.net/weierophinney/introducing-zend-framework-20

Page 46: Встречайте Zend Framework 2.0

Documentation

Page 47: Встречайте Zend Framework 2.0

Documentation

Требует стандартизации.http://framework.zend.com/wiki/display/ZFDEV2/Proposal+for+Documentation+in+ZF2

OverviewQuick StartConfiguration OptionsAvailable methodsExamples

Page 48: Встречайте Zend Framework 2.0

Internationalization/Localization

Page 49: Встречайте Zend Framework 2.0

I18n/L10n

1. Performance.

2. Несоответствия ZF API и PHP API (например в форматах, поддерживаемых Zend_Date и привычных для PHP пользователей).

3. Использование статических данных и глобального состояния в Zend_Locale серьезно осложняет тестирование как Zend_Locale, так и других компонент.

Page 50: Встречайте Zend Framework 2.0

The End

Alexander Veremyev

[email protected]