Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Like this? Share it with your network

Share

Встречайте Zend Framework 2.0

  • 11,723 views
Uploaded on

Александр Веремьев ...

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

More in: Technology , Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
11,723
On Slideshare
5,453
From Embeds
6,270
Number of Embeds
6

Actions

Shares
Downloads
45
Comments
0
Likes
4

Embeds 6,270

http://zfconf.org.ua 4,818
http://mageconf.com 1,317
http://mageconf.local 60
http://dev.mageconf.com 38
http://mageconf 36
http://static.slidesharecdn.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Zend Framework 2.0Alexander Veremyevalexander.v@zend.comZF Core team
  • 2. ZF2 related ресурсы
  • 3. Ресурсы, посвященные ZF2:http://framework.zend.com/ -> Community -> Resources -> Wiki -> ZFDEV2http://framework.zend.com/wiki/display/ZFDEV2/Home
  • 4. Ресурсы, посвященные ZF2:http://framework.zend.com/ -> Community -> Resources -> Wiki -> ZFDEV2http://framework.zend.com/wiki/display/ZFDEV2/Homeirc://freenode/#zftalk.devirc://freenode/#zftalk-communityzf-contributors@lists.zend.com
  • 5. Ресурсы, посвященные ZF2:git://git.zendframework.com/zf.gitgit://github.com/zendframework/zf2.githttps://github.com/zendframework/zf2https://github.com/zendframework/zf2/blob/master/README-GIT.txt
  • 6. Изменения в ZF2.
  • 7. Изменения в ZF2.Почему нужны какие-то изменения?Что не устраивает в 1.x?1. Слишком много путей делать одни и те же вещи.2. Сложность в изучении.3. Неудовлетворительная производительность.
  • 8. Изменения в ZF2:1. Namespaces2. Процедура autoloading’а и загрузки плагинов3. Типизация Exceptions.4. Тестирование.5. MVC6. Унификация документации.
  • 9. Namespaces
  • 10. Для чего сделан перевод на Namespaces:1. Удобно для пользователей.
  • 11. $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 ZendGdata;$service = GdataCalendar::AUTH_SERVICE_NAME;$client = GdataClientLogin::getHttpClient($user, $pass, $service);$service = new GdataCalendar($client);$listFeed = $service->getCalendarListFeed();
  • 12. Для чего сделан перевод на Namespaces:1. Удобно для пользователей.2. Удобно внутри ZF, упрощает код, облегчает поддержку.
  • 13. Перевод на Namespaces: весна 2010
  • 14. ZF 2.0 Requirementshttp://framework.zend.com/wiki/display/ZFDEV2/Zend+Framework+2.0+Requirements
  • 15. Перевод на Namespaces производился вполуавтоматическом режиме:https://github.com/ralphschindler/PHPToolshttps://github.com/zendframework/zf2/tree/master/working/working/BC-Breaks.txtworking/PHPNamespacer-MappedClasses.xml
  • 16. Особенности: отсутствие стандарта наиспользование namespaces в docblocks. namespace ZendToolFrameworkClientConsole; use ZendToolFrameworkRegistry; class ArgumentParser implements RegistryEnabled { /** * setRegistry() * * @param ZendToolFrameworkRegistry $registry * @return ZendToolFrameworkClientConsoleArgumentParser */ public function setRegistry(Registry $registry) { // ... return $this; } }
  • 17. 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>ZendAMFParserAMF3</newNamespace> <newClassName>Deserializer</newClassName> <newFullyQualifiedName>ZendAMFParserAMF3Deserializer</newFullyQualifiedName></mappedClass>...</mappedClasses>
  • 18. Проблемы с зарезервированными словами.interface Zend_Server_Interfaceabstract class Zend_CodeGenerator_Abstract =>namespace ZendServer;interface Servernamespace ZendCodeGenerator;abstract class AbstractCodeGenerator
  • 19. Использование интерфейсов.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|ZendQueueAdapter $adapter * @return ZendQueueQueue Provides a fluent interface */ public function setAdapter($adapter) {}}
  • 20. Вопрос актуальности PHPNamespacer-MappedClasses.php: ??? Проблема - сохранялась ли актуальность при слиянии fixes и новой функциональности из 1.x
  • 21. Autoloading &Plugin Loading
  • 22. Что не удовлетворяет в autoloading’е ZF 1.x:http://framework.zend.com/wiki/display/ZFDEV2/Proposal+For+Autoloading+In+ZF21. Сложности с использованием include_path.2. Чем глубже ZF library каталог в include_path, тем медленнее loading.3. Не поддерживает системы, где присутствуют связи отличающиеся от 1:1.4. Проблемы с производительностью даже при применении байткод кэширования.5. Не позволяет просто работать с архитектурами, где компоненты могут быть инсталлированны в индивидуальные поддеревья.
  • 23. Standard Autoloader:http://framework.zend.com/wiki/display/ZFDEV2/Proposal+For+Autoloading+In+ZF2
  • 24. Standard Autoloader:http://framework.zend.com/wiki/display/ZFDEV2/Proposal+For+Autoloading+In+ZF2
  • 25. Classmap Autoloader:http://framework.zend.com/wiki/display/ZFDEV2/Proposal+For+Autoloading+In+ZF2 bin/classmap_generator.php
  • 26. Plugin loading ZF 1.x:http://framework.zend.com/wiki/display/ZFDEV2/Proposal+for+Plugin+Loading+in+ZF21. Plugin loader используется не везде, где следует.2. Часть функциональности дублируется в классах, использующих plugin loader.3. Проблемы с case sensitivity.4. Производительность!!!
  • 27. Exceptions
  • 28. Exceptions в ZF 1.x:a) Один exception класс на компоненту.b) Все исключения отнаследованы от Zend_Exception, что затрудняет дальнейшую типизацию Exceptionов.PHP Standards working group meeting (2009),планируемое решение для PEAR:a) Каждая компонента содержит интерфейс-маркер Exceptionb) Различные exception классы компоненты декларируются как имплементирующие указанный интерфейс-маркер, при этом они наследуют Exception класс или какой-либо более специализированный SPL exception класс.
  • 29. SPL exceptions:http://www.php.net/manual/en/spl.exceptions.phpBadFunctionCallException OutOfRangeExceptionBadMethodCallException OverflowExceptionDomainException RangeExceptionInvalidArgumentException RuntimeExceptionLengthException UnderflowExceptionLogicException UnexpectedValueExceptionOutOfBoundsException
  • 30. Структура файлов внутри компоненты, пример. 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
  • 31. Пример работы с Exceptions в ZF2
  • 32. Тестирование
  • 33. Проблемы unit тестов в ZF 1.x:1. Permissions (при распространении ZF в составе некоторых Linux дистрибутивов).2. Служебные классы "живущие" вместе с тестами.3. Обычно не-PHP файлы (конфиги, ...) расположены в _files. Тем не менее, это требует review для каждой компоненты в отдельности.4. Вопросы возможности запуска тестов в параллельном режиме.5. Ресурсоемкость.6. Нет возможности запуска по списку зависимости компонент.
  • 34. MVC
  • 35. Controller Layer:1. Сложно в изучении.2. Используются некоторые "анти-паттерны": – Zend_Controller_Front является синглетоном; – Helper broker доступен только через protected члены класса => проблемы с injecting. …1. Многие неотъемлемые части реализации вызывают падение производительности.2. Сложности с созданием модульного приложения (недостаточность примеров + особенности реализации).3. Возможность выполнения нескольких actions - сомнительная feature.4. Error handling.5. Возможность остановить обработку и немедленно передать response.
  • 36. View Layer:1. Слишком много ответственностей: отслеживание переменных, фильтров, хелперов, поиск и рендеринг скриптов.2. Загрузка helpers - очень узкое место в производительности по причине overloading и подгружаемости плагинов.3. Система хэлперов сложна для новых пользователей ("где метод doctype() определен?! Какие параметры он принимает на вход?!")4. View могут использовать только PHP скрипты, отсутствуют приспособления для подгружаемости views откуда-либо еще (db, web services, ...).5. Layouts представлены в системе, но не обеспечивают возможностей, кроме как рендеринга нового view.
  • 37. Forms в ZF 1.x:1. Form и subcomponents реализуют слишком много ответственностей. Каждая компонента оперирует как минимум одним встроенным plugin loader’ом и обращается к этим loaderам для работы с prefix paths.2. Будучи доступны как отдельные объекты, указанные plugin loaderы могли бы предоставить большую гибкость и улучшить производительность.3. Использованный decorator pattern должен быть не частью объекта Form, а находиться во view layerе, form объекты при этом должны быть инъецированы в decorator chains.
  • 38. Zend_Application:1. Условное конфигурирование модулей в зависимости от текущего запроса.2. Производительность чтения ресурсов.
  • 39. MVC performance:Текущую реализацию сложно оптимизировать.http://www.slideshare.net/weierophinney/introducing-zend-framework-20
  • 40. Documentation
  • 41. DocumentationТребует стандартизации.http://framework.zend.com/wiki/display/ZFDEV2/Proposal+for+Documentation+in+ZF2OverviewQuick StartConfiguration OptionsAvailable methodsExamples
  • 42. Internationalization/Localization
  • 43. I18n/L10n1. Performance.2. Несоответствия ZF API и PHP API (например в форматах, поддерживаемых Zend_Date и привычных для PHP пользователей).3. Использование статических данных и глобального состояния в Zend_Locale серьезно осложняет тестирование как Zend_Locale, так и других компонент.
  • 44. The EndAlexander Veremyevalexander.v@zend.com