Slides

Zend Framework 2 - O que esperar da nova versão

Description
O Objetivo desta palestra é discutir um pouco da história do Zend Framework e sua caminhada até o presente momento, e seus caminhos que estão impulsionando a reescrita da Versão 2.0, os velhos e os novos paradgmas e os desafios que a nova versão vem colocando à tona frente aos paradgmas do desenvolvimento web.
Categories
Published
of 76
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Related Documents
Share
Transcript
  • 1. Zend Framework repaginado, o que esperar da nova versão Domingos Teruelquarta-feira, 29 de agosto de 12 1
  • 2. O Palestrantequarta-feira, 29 de agosto de 12 2
  • 3. Agenda • Um pouco de história • O Futuro • Novos padrões e velhos padrões • Novos componentes • Outras coisasquarta-feira, 29 de agosto de 12 3
  • 4. Um pouco de história • Verão de 2005 • Inicio da codificação do Zend Framework com um seleto grupo de parceiros • Outono de 2005 • Durante a conferência anual ZendCon é anunciado o processo de Comunidade PHP, que entre outras coisas envolveu a Fundação Eclipse, o relançamento da Zend Developers Zone, e o Zend Frameworkquarta-feira, 29 de agosto de 12 4
  • 5. Um pouco de história • Julho de 2007 • Liberada a primeira versão estável do Zend Framework (1.0.0) • Incluindo uma implementação basica do Padrão MVC, com plugins, action helpers, renderização automatica, entre outros • Várias APIs de consumo de Webservices, camadas de autenticação e autorização, Table, Row, Data Gateways, etc • Componente servidor para XML-RPC e RESTquarta-feira, 29 de agosto de 12 5
  • 6. Um pouco de história • Março de 2008 • Liberada a versão 1.5.0 • Zend_Form e Zend_Layout foram os carros chefes • Muitas melhorias no Zend_View (Agora com entendimento do layout)quarta-feira, 29 de agosto de 12 6
  • 7. Um pouco de história • Setembro de 2008 • Zend Framework 1.6.0 • Integração com o Dojo Toolkit • Zend_Test, implementação ou extensão do PHPUnit • Novos Actions Helper e a introdução do ContextSwitchquarta-feira, 29 de agosto de 12 7
  • 8. Um pouco de história • Novembro de 2008 • Versão 1.7.0 • Melhorias de perfomance • Atenção especial ao AMF (Adobe Action Message) • Grande interação com o protocolo da Adobe (Action Script do Flash e mais tarde Adobe Air)quarta-feira, 29 de agosto de 12 8
  • 9. Um pouco de história • Abril de 2009 • Released 1.8.0 • Zend_Tool e Zend_Aplication • Full Stackquarta-feira, 29 de agosto de 12 9
  • 10. Um pouco de história • 1.9.0 em Julho de 2009 • Reescrita do Zend_Feed_Reader • PHP 5.3 Compatible • Adições da Comunidadequarta-feira, 29 de agosto de 12 10
  • 11. Um pouco de história • Em Outubro de 2009 foi iniciada uma verdadeira caça a bugs incentivada pela comunidadequarta-feira, 29 de agosto de 12 11
  • 12. Um pouco de história • Janeiro de 2010 • Chega a versão 1.10 • Novos componentes de testes • ZendTestCase com Zend_Application • Virada na Documentação, além da reorganização, adoção do PhD para redenrizar o manual, quickstart no sistema de comentários. • Learning Zend Framework Sectionquarta-feira, 29 de agosto de 12 12
  • 13. Um pouco de história • Fevereiro de 2010 marcou o inicío do desenvolvimento em cima do Zend Framework 2.0 • Junho de 2010 Formação do Time de Revisão da Comunidadequarta-feira, 29 de agosto de 12 13
  • 14. Um pouco de história • Novembro de 2010 • Novo release, 1.11 • Zend_Http_UserAgent • Zend_Cloud • API SimpleCloudquarta-feira, 29 de agosto de 12 14
  • 15. Futuro?quarta-feira, 29 de agosto de 12 15
  • 16. Daqui vamos para onde?quarta-feira, 29 de agosto de 12 16
  • 17. Revoluçãoquarta-feira, 29 de agosto de 12 17
  • 18. Evoluçãoquarta-feira, 29 de agosto de 12 18
  • 19. “A mutação é a chave para a nossa evolução. Ela nos permitiu evoluir de organismo unicelular à espécia dominante do planeta. Este processo foi e é lento, milhares de anos podem se passar. Mas em algumas centenas de milênios, a evolução dá um salto”quarta-feira, 29 de agosto de 12 19
  • 20. Melhorias incrementaisquarta-feira, 29 de agosto de 12 20
  • 21. Focar na melhoria da consistência e perfomancequarta-feira, 29 de agosto de 12 21
  • 22. Passos de bebêquarta-feira, 29 de agosto de 12 22
  • 23. • Autoload (extipar chamadas require_once) • Conversão para namespaces • Refatoração e padronização do uso de exceptions • Refatoração e implementação consistente de uma estratégia de carregamento de plugins • Refatorar para uso dos paradigmas especificos do PHP 5.3/5.4 onde se fizer necesárioquarta-feira, 29 de agosto de 12 23
  • 24. Reescrever somente onde faz sentidoquarta-feira, 29 de agosto de 12 24
  • 25. Zend_Db • Dificuldade em obter conexões persistentes e compartilhá-la com outras instâncias ou de diferentes classes • Dificuldades em obter os metadados de forma consistente • Dificuldades em extender • Complexidade em adicionar tarefas pre|posquarta-feira, 29 de agosto de 12 25
  • 26. Zend_Session • Padrão caixa-preta != testável • Armazenamento do Namespace incompatível com $_SESSION • Grandes incompatibilidades com ext/ sessionquarta-feira, 29 de agosto de 12 26
  • 27. <?php use ZendSessionSessionManager, ZendSessionSessionContainer as SessionContainer; $manager = new SessionManager(array( class => MinhaImplementacaoSessionConfiguration, storage => MinhaImplementacaoSessionStorage )); $container = new SessionContainer(SessionIndex, $manager); $container[meuindice] = meu conteudo; $container->setExpirationHops(20);quarta-feira, 29 de agosto de 12 27
  • 28. Filtros e Validadores • Acessos estáticos e uso em cadeias estão mixados no mesmo objeto • Não utilizar a metodologia comum de carregamento de plugin • Padrões required em Filter_Input e Form não são mais suportadosquarta-feira, 29 de agosto de 12 28
  • 29. <?php namespace ZendValidator; if(StaticValidator::execute($value,int)) { //Validação Passou } $chain = new ValidatorChain(); $chain->addValidator(new Int(),true) ->addValidator(new GreaterThan(5)); if($chain->isValid($value)) { //Validação Passou novamente }quarta-feira, 29 de agosto de 12 29
  • 30. Adição de novas funcionalidades que favoreçam a extensibilidadequarta-feira, 29 de agosto de 12 30
  • 31. Exemplos • SignalSlot • FilterChain • SPL Extension (SplStack, SplQueue) • PluginBrokerquarta-feira, 29 de agosto de 12 31
  • 32. Explicitação de códigoquarta-feira, 29 de agosto de 12 32
  • 33. Magia por muitas vezes pode ser muito inigmáticaquarta-feira, 29 de agosto de 12 33
  • 34. echo $this->headLink()->appendStylesheet(meuarquivo.css); /** * Hits Zend_View::_call() * Calls Zend_View::getHelper() * Calls Zend_View::getPlugin() * Calls Zend_Loader_PluginLoader::load() * Calls Zend_Loader::isReadable() * Calls call_user_function(hits autoloader..) * which calls Zend_Loader::loadClass * ... */quarta-feira, 29 de agosto de 12 34
  • 35. Mágica? Bruxaria?quarta-feira, 29 de agosto de 12 35
  • 36. class MeuController extends Zend_Controller_Action { public function meuObjetoAction() { $this->view->meuobjeto = uma string qualquer; } } Quando Onde isso está Quando entra os layouts? definido? renderizar?quarta-feira, 29 de agosto de 12 36
  • 37. • Código explícito • Melhora o entendimento • É mais fácil • Facilita a análise • Facilita sua manutençãoquarta-feira, 29 de agosto de 12 37
  • 38. Otimização para perfomancequarta-feira, 29 de agosto de 12 38
  • 39. Requisições/Segundo 0 150 300 450 600 1.0.0 1.5.0 1.6.0 1.7.0 1.8.0 1.9.0 1.10.0quarta-feira, 29 de agosto de 12 39
  • 40. Namespacesquarta-feira, 29 de agosto de 12 40
  • 41. Namespaces • Nomes de classes relativamente grandes • Zend_Form_Element_HtmlArea_Interfacequarta-feira, 29 de agosto de 12 41
  • 42. Namespace • Um namespace declara um arquivo de classe • Um namespace por arquivo • Qualquer classe usada que não estiver no namespace atual (ou em um subnamespace) é importado e tipicamente apelidada • Resolução global totalmente desencorajada, exceto nos casos de classes referenciadas em stringsquarta-feira, 29 de agosto de 12 42
  • 43. Importe classes com o comando use em vez de fazer chamadas a require_once em seu códigoquarta-feira, 29 de agosto de 12 43
  • 44. Exceçõesquarta-feira, 29 de agosto de 12 44
  • 45. Antigamente • Exceções derivavam de uma classe • Não tinha capacidade de extender os tipos de exceções semânticas oferecidas pela SPL • Estratégias de captura limitada • Forte depêndencia entre classes e o todoquarta-feira, 29 de agosto de 12 45
  • 46. Nova abordagem • Eliminação da Zend_Exception • Interface Exception marcada por componente • Exceções concretas residem em um subnamespace Exception estendendo da SPL Exceptionquarta-feira, 29 de agosto de 12 46
  • 47. namespace ZendEventManagerException; use ZendEventManagerException; class InvalidaArgumentException extends InvalidArgumentException implements Exception { }quarta-feira, 29 de agosto de 12 47
  • 48. namespace ZendEventManagerException; use ZendEventManagerException; try { $events->trigger(gera-exception,$objeto); }catch (InvalidArgumentException $e) { }catch (Exception $e) { }catch (InvalidArgumentException $e) { }catch (Exception $e) { }quarta-feira, 29 de agosto de 12 48
  • 49. Autocarregamentoquarta-feira, 29 de agosto de 12 49
  • 50. Autocarregamento: Problemas • Problemas de perfomance • A maioria das classes são utilizadas somente no momento adequado e não devem ser carregadas até que seja necessário • A falta de chamadas require_once leva a errosquarta-feira, 29 de agosto de 12 50
  • 51. Autocarregamento: nova abordagem • Fim dos require_once • Múltipla abordagem de autocarregamento • via include_path (ZF 1) • Namespace / prefixo do fornecedor • Mapa de Classes (Novo)quarta-feira, 29 de agosto de 12 51
  • 52. return array( Index/MeuController => __DIR__ . indexcontrollersMeuController.php . IndexModelObjeto => __DIR__ . indexmodelsObjeto.php);//Mapa de Classesrequire_once Zend/Loader/ClassMapAutoloader.php;$loader = new ZendLoaderClassMapAutoloader ( ./.classmap.php);$loader->register();$objeto = new IndexModelObjeto();quarta-feira, 29 de agosto de 12 52
  • 53. Carregamento de Pluginsquarta-feira, 29 de agosto de 12 53
  • 54. Carregamento de plugin: definição • Plugin é qualquer classe que é determinada em tempo de execução • Auxiliares de controle de visão • Adaptadores • Filtros e Validadoresquarta-feira, 29 de agosto de 12 54
  • 55. Carregamento de plugins: Problema • Várias abordagens para descobrir as classes plugin • Caminhos relativos para as classes chamadas • Pilhas do tipo prefixo-caminho (comum) • Modificadores para indicar classes • O jeito tradicional é uma m%$â • Péssimo para a perfomance • Depuração complicada • Problemas de caching de plugins descobertosquarta-feira, 29 de agosto de 12 55
  • 56. Carregamento de plugins: Soluções • Interface de localização de Plugins • Permite variar a implementação de pesquisa de plugins • Interface de agente de plugins • Compõe um Localizador de Pluginsquarta-feira, 29 de agosto de 12 56
  • 57. namespace MeuComponenteuse ZendLoaderPluginClassLoader, ZendLoaderPluginBroker;class ComponentLoader extends PluginClassLoader{ protected $plugins = arry( soo => MeuComponenteBla, soo_bla => MeuComponenteSooBla );}quarta-feira, 29 de agosto de 12 57
  • 58. Novos Componentesquarta-feira, 29 de agosto de 12 58
  • 59. ZendEventManagerquarta-feira, 29 de agosto de 12 59
  • 60. • Como introduzir debug/logging na aplicação? • Como permitir implementação de caches pelos utilizadores? • Como permitir utilizadores introduzam filtros e validação?quarta-feira, 29 de agosto de 12 60
  • 61. EventManager: Premissas • Razoavelmente simples de entender • Permitir a interrupção da execução • Capacidade de anexar ao evento muitos componentes de emissão de uma só vezquarta-feira, 29 de agosto de 12 61
  • 62. EventManager: Definição • Um Event Manager é um objeto que agrega os ouvintes com nome, e que desencadeia eventos; • Um Listener é um retorno que pode reagir a um Evento • Um Evento é uma açãoquarta-feira, 29 de agosto de 12 62
  • 63. EventManager: Casos de uso • Implementação simples do padrão (pattern) observer; • Implementação Orientada a Aspectos; • Implementação de event-driven arquiteturasquarta-feira, 29 de agosto de 12 63
  • 64. Dependency Injection (DI)quarta-feira, 29 de agosto de 12 64
  • 65. DI - Simples definição • Define maneiras de passar as dependências a um objetoquarta-feira, 29 de agosto de 12 65
  • 66. DI vs DIC • Di é um pattern; • Dic (Container) é uma ferramentaquarta-feira, 29 de agosto de 12 66
  • 67. • ZendDiDefinition • Definições é o lugar onde ZendDi tenta compreender a estrutura do código.quarta-feira, 29 de agosto de 12 67
  • 68. ZendDi: Caso de uso • Tirar os controladores MVC do containerquarta-feira, 29 de agosto de 12 68
  • 69. namespace IndexController; Class Entry implements Dispatchable { public function setResource(Resource $resource) { $this->resource = $resource; } public function dispatch(Request $request, Response $response = null) { $entry = $this->resource->get($id) } }quarta-feira, 29 de agosto de 12 69
  • 70. class FrontController implements Dispatchable { public function __construct(DependencyInjection $di) { $this->id = $id; } public function dispatch(Request $request, Response = null) { /*...*/ $controller = $this->di->get($controllerName); /**..**/ } }quarta-feira, 29 de agosto de 12 70
  • 71. • Perfomance • Desacoplamento de código • Simplificação do código do controladorquarta-feira, 29 de agosto de 12 71
  • 72. Outras coisas • Refatoração e reescrita do MVC • Internacionalização e Localização • Testing • Documentação • Empacotamento • Ferramentas de migraçãoquarta-feira, 29 de agosto de 12 72
  • 73. ZF II Git • Guia do git • http://bit.ly/zf2gitguide • GitHub • http://github.com/zendframework/zf2 • CLA ainda necessário quarta-feira, 29 de agosto de 12 73
  • 74. quarta-feira, 29 de agosto de 12 74
  • 75. PHPSC Conf 2012 Sábado, 27 de outubro de 2012 http://conf.phpsc.com.brquarta-feira, 29 de agosto de 12 75
  • 76. Obrigado! http://about.me/mingomax http://slideshare.net/mingomaxquarta-feira, 29 de agosto de 12 76
  • We Need Your Support
    Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

    Thanks to everyone for your continued support.

    No, Thanks