Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

3,279 views

Published on

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.

  • Be the first to comment

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

  1. 1. Zend Framework repaginado, o que esperar da nova versão Domingos Teruelquarta-feira, 29 de agosto de 12 1
  2. 2. O Palestrantequarta-feira, 29 de agosto de 12 2
  3. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 15. Futuro?quarta-feira, 29 de agosto de 12 15
  16. 16. Daqui vamos para onde?quarta-feira, 29 de agosto de 12 16
  17. 17. Revoluçãoquarta-feira, 29 de agosto de 12 17
  18. 18. Evoluçãoquarta-feira, 29 de agosto de 12 18
  19. 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. 20. Melhorias incrementaisquarta-feira, 29 de agosto de 12 20
  21. 21. Focar na melhoria da consistência e perfomancequarta-feira, 29 de agosto de 12 21
  22. 22. Passos de bebêquarta-feira, 29 de agosto de 12 22
  23. 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. 24. Reescrever somente onde faz sentidoquarta-feira, 29 de agosto de 12 24
  25. 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. 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. 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. 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. 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. 30. Adição de novas funcionalidades que favoreçam a extensibilidadequarta-feira, 29 de agosto de 12 30
  31. 31. Exemplos • SignalSlot • FilterChain • SPL Extension (SplStack, SplQueue) • PluginBrokerquarta-feira, 29 de agosto de 12 31
  32. 32. Explicitação de códigoquarta-feira, 29 de agosto de 12 32
  33. 33. Magia por muitas vezes pode ser muito inigmáticaquarta-feira, 29 de agosto de 12 33
  34. 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. 35. Mágica? Bruxaria?quarta-feira, 29 de agosto de 12 35
  36. 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. 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. 38. Otimização para perfomancequarta-feira, 29 de agosto de 12 38
  39. 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. 40. Namespacesquarta-feira, 29 de agosto de 12 40
  41. 41. Namespaces • Nomes de classes relativamente grandes • Zend_Form_Element_HtmlArea_Interfacequarta-feira, 29 de agosto de 12 41
  42. 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. 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. 44. Exceçõesquarta-feira, 29 de agosto de 12 44
  45. 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. 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. 47. namespace ZendEventManagerException; use ZendEventManagerException; class InvalidaArgumentException extends InvalidArgumentException implements Exception { }quarta-feira, 29 de agosto de 12 47
  48. 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. 49. Autocarregamentoquarta-feira, 29 de agosto de 12 49
  50. 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. 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. 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. 53. Carregamento de Pluginsquarta-feira, 29 de agosto de 12 53
  54. 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. 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. 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. 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. 58. Novos Componentesquarta-feira, 29 de agosto de 12 58
  59. 59. ZendEventManagerquarta-feira, 29 de agosto de 12 59
  60. 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. 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. 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. 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. 64. Dependency Injection (DI)quarta-feira, 29 de agosto de 12 64
  65. 65. DI - Simples definição • Define maneiras de passar as dependências a um objetoquarta-feira, 29 de agosto de 12 65
  66. 66. DI vs DIC • Di é um pattern; • Dic (Container) é uma ferramentaquarta-feira, 29 de agosto de 12 66
  67. 67. • ZendDiDefinition • Definições é o lugar onde ZendDi tenta compreender a estrutura do código.quarta-feira, 29 de agosto de 12 67
  68. 68. ZendDi: Caso de uso • Tirar os controladores MVC do containerquarta-feira, 29 de agosto de 12 68
  69. 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. 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. 71. • Perfomance • Desacoplamento de código • Simplificação do código do controladorquarta-feira, 29 de agosto de 12 71
  72. 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. 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. 74. quarta-feira, 29 de agosto de 12 74
  75. 75. PHPSC Conf 2012 Sábado, 27 de outubro de 2012 http://conf.phpsc.com.brquarta-feira, 29 de agosto de 12 75
  76. 76. Obrigado! http://about.me/mingomax http://slideshare.net/mingomaxquarta-feira, 29 de agosto de 12 76

×