SlideShare une entreprise Scribd logo
1  sur  76
Télécharger pour lire hors ligne
Zend Framework
              repaginado, o que esperar
                   da nova versão

                                   Domingos Teruel




quarta-feira, 29 de agosto de 12                     1
O Palestrante




quarta-feira, 29 de agosto de 12   2
Agenda

                 • Um pouco de história
                 • O Futuro
                 • Novos padrões e velhos padrões
                 • Novos componentes
                 • Outras coisas

quarta-feira, 29 de agosto de 12                       3
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 Framework


quarta-feira, 29 de agosto de 12                                          4
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 REST



quarta-feira, 29 de agosto de 12                                                     5
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
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
                                   ContextSwitch


quarta-feira, 29 de agosto de 12                                      7
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
Um pouco de história

                 • Abril de 2009
                  • Released 1.8.0
                    • Zend_Tool e Zend_Aplication
                    • Full Stack


quarta-feira, 29 de agosto de 12                    9
Um pouco de história

                 • 1.9.0 em Julho de 2009
                  • Reescrita do Zend_Feed_Reader
                  • PHP 5.3 Compatible
                  • Adições da Comunidade


quarta-feira, 29 de agosto de 12                    10
Um pouco de história


                 • Em Outubro de 2009 foi iniciada uma
                       verdadeira caça a bugs incentivada pela
                       comunidade




quarta-feira, 29 de agosto de 12                                 11
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 Section


quarta-feira, 29 de agosto de 12                                              12
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 Comunidade




quarta-feira, 29 de agosto de 12                          13
Um pouco de história

                 • Novembro de 2010
                  • Novo release, 1.11
                    • Zend_Http_UserAgent
                    • Zend_Cloud
                      • API SimpleCloud

quarta-feira, 29 de agosto de 12            14
Futuro?




quarta-feira, 29 de agosto de 12   15
Daqui vamos
              para onde?




quarta-feira, 29 de agosto de 12   16
Revolução
quarta-feira, 29 de agosto de 12               17
Evolução
quarta-feira, 29 de agosto de 12              18
“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
Melhorias incrementais

quarta-feira, 29 de agosto de 12                            20
Focar na melhoria da
                    consistência e perfomance
quarta-feira, 29 de agosto de 12                21
Passos de bebê



quarta-feira, 29 de agosto de 12                    22
•     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ário


quarta-feira, 29 de agosto de 12                                      23
Reescrever somente
                                    onde faz sentido
quarta-feira, 29 de agosto de 12                        24
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|pos

quarta-feira, 29 de agosto de 12                                      25
Zend_Session

                 • Padrão caixa-preta != testável
                 • Armazenamento do Namespace
                       incompatível com $_SESSION
                 • Grandes incompatibilidades com ext/
                   session




quarta-feira, 29 de agosto de 12                         26
<?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
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 suportados



quarta-feira, 29 de agosto de 12                              28
<?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
Adição de novas funcionalidades que
                                           favoreçam a extensibilidade

quarta-feira, 29 de agosto de 12                                    30
Exemplos

                 • SignalSlot
                 • FilterChain
                 • SPL Extension (SplStack, SplQueue)
                 • PluginBroker


quarta-feira, 29 de agosto de 12                        31
Explicitação de código

quarta-feira, 29 de agosto de 12                            32
Magia por muitas
                                    vezes pode ser
                                   muito inigmática

quarta-feira, 29 de agosto de 12                      33
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
Mágica? Bruxaria?
quarta-feira, 29 de agosto de 12                  35
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
• Código explícito
                  • Melhora o entendimento
                  • É mais fácil
                  • Facilita a análise
                  • Facilita sua manutenção

quarta-feira, 29 de agosto de 12              37
Otimização para
                                       perfomance
quarta-feira, 29 de agosto de 12                     38
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.0




quarta-feira, 29 de agosto de 12                                                    39
Namespaces



quarta-feira, 29 de agosto de 12                40
Namespaces


                 • Nomes de classes relativamente grandes
                      •     Zend_Form_Element_HtmlArea_Interface




quarta-feira, 29 de agosto de 12                                   41
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 strings


quarta-feira, 29 de agosto de 12                                   42
Importe classes com o
               comando use em vez de
                  fazer chamadas a
             require_once em seu código


quarta-feira, 29 de agosto de 12          43
Exceções
quarta-feira, 29 de agosto de 12              44
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 todo

quarta-feira, 29 de agosto de 12                                    45
Nova abordagem

                 • Eliminação da Zend_Exception
                 • Interface Exception marcada por
                       componente
                 • Exceções concretas residem em um
                       subnamespace Exception estendendo da SPL
                       Exception



quarta-feira, 29 de agosto de 12                                  46
namespace ZendEventManagerException;

    use ZendEventManagerException;

    class InvalidaArgumentException extends
    InvalidArgumentException implements
    Exception
    {

    }



quarta-feira, 29 de agosto de 12              47
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
Autocarregamento



quarta-feira, 29 de agosto de 12              49
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
                       erros



quarta-feira, 29 de agosto de 12                                50
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
return array(
    'Index/MeuController' => __DIR__ .
    'indexcontrollersMeuController.php' .
    'IndexModelObjeto' => __DIR__ . 'indexmodels
Objeto.php'
);


//Mapa de Classes
require_once 'Zend/Loader/ClassMapAutoloader.php';

$loader = new ZendLoaderClassMapAutoloader (
    './.classmap.php'
);

$loader->register();

$objeto = new IndexModelObjeto();


quarta-feira, 29 de agosto de 12                       52
Carregamento de
                                   Plugins


quarta-feira, 29 de agosto de 12                53
Carregamento de
                               plugin: definição
                 • Plugin é qualquer classe que é determinada
                       em tempo de execução
                      • Auxiliares de controle de visão
                      • Adaptadores
                      • Filtros e Validadores

quarta-feira, 29 de agosto de 12                                54
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 descobertos


quarta-feira, 29 de agosto de 12                                            55
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        Plugins



quarta-feira, 29 de agosto de 12                              56
namespace MeuComponente

use ZendLoaderPluginClassLoader,
    ZendLoaderPluginBroker;

class ComponentLoader extends PluginClassLoader
{
    protected $plugins = arry(
        'soo' => 'MeuComponenteBla',
        'soo_bla' => 'MeuComponenteSooBla'
    );
}



quarta-feira, 29 de agosto de 12              57
Novos Componentes
quarta-feira, 29 de agosto de 12         58
ZendEventManager



quarta-feira, 29 de agosto de 12            59
• 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
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ó vez




quarta-feira, 29 de agosto de 12                              61
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ção

quarta-feira, 29 de agosto de 12                                 62
EventManager: Casos de uso


                 • Implementação simples do padrão (pattern)
                       observer;
                 • Implementação Orientada a Aspectos;
                 • Implementação de event-driven arquiteturas


quarta-feira, 29 de agosto de 12                                63
Dependency Injection
                           (DI)


quarta-feira, 29 de agosto de 12           64
DI - Simples definição


                 • Define maneiras de passar as dependências a
                       um objeto




quarta-feira, 29 de agosto de 12                                65
DI vs DIC


                 • Di é um pattern;
                 • Dic (Container) é uma ferramenta



quarta-feira, 29 de agosto de 12                      66
• ZendDiDefinition
                  • Definições é o lugar onde ZendDi tenta
                            compreender a estrutura do código.




quarta-feira, 29 de agosto de 12                                 67
ZendDi: Caso de uso


                 • Tirar os controladores MVC do container



quarta-feira, 29 de agosto de 12                             68
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
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
• Perfomance
                 • Desacoplamento de código
                 • Simplificação do código do controlador



quarta-feira, 29 de agosto de 12                           71
Outras coisas
                 • Refatoração e reescrita do MVC
                 • Internacionalização e Localização
                 • Testing
                 • Documentação
                 • Empacotamento
                 • Ferramentas de migração

quarta-feira, 29 de agosto de 12                       72
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
quarta-feira, 29 de agosto de 12   74
PHPSC Conf 2012
                               Sábado, 27 de outubro de 2012
                                   http://conf.phpsc.com.br




quarta-feira, 29 de agosto de 12                               75
Obrigado!
                                     http://about.me/mingomax
                                   http://slideshare.net/mingomax




quarta-feira, 29 de agosto de 12                                    76

Contenu connexe

Similaire à Zend Framework repaginado: o que esperar da nova versão

.NET Core + Docker: containers e seus benefícios no deployment de aplicações ...
.NET Core + Docker: containers e seus benefícios no deployment de aplicações ....NET Core + Docker: containers e seus benefícios no deployment de aplicações ...
.NET Core + Docker: containers e seus benefícios no deployment de aplicações ...Renato Groff
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigitalJust Digital
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021Renato Groffe
 
.NET Core + Docker: containers e seus benefícios no deployment de aplicações
.NET Core + Docker: containers e seus benefícios no deployment de aplicações.NET Core + Docker: containers e seus benefícios no deployment de aplicações
.NET Core + Docker: containers e seus benefícios no deployment de aplicaçõesRenato Groff
 
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019Renato Groff
 
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...Renato Groff
 
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Renato Groff
 
Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8 Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8 Acquia
 
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...Renato Groff
 
Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?Mario Guedes
 
Reduzindo Custos e Aumentando a Produtividade com Ambientes de Dev / Test na ...
Reduzindo Custos e Aumentando a Produtividade com Ambientes de Dev / Test na ...Reduzindo Custos e Aumentando a Produtividade com Ambientes de Dev / Test na ...
Reduzindo Custos e Aumentando a Produtividade com Ambientes de Dev / Test na ...André Dias
 
Docker e Kubernetes: Dicas e Truques - Dezembro-2019
Docker e Kubernetes: Dicas e Truques - Dezembro-2019Docker e Kubernetes: Dicas e Truques - Dezembro-2019
Docker e Kubernetes: Dicas e Truques - Dezembro-2019Renato Groff
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Renato Groff
 
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016Renato Groff
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Renato Groff
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Renato Groff
 
De zero a cem em cloud computing transformando idéias em aplicações em pouco...
De zero a cem em cloud computing  transformando idéias em aplicações em pouco...De zero a cem em cloud computing  transformando idéias em aplicações em pouco...
De zero a cem em cloud computing transformando idéias em aplicações em pouco...Ricardo Martinelli de Oliveira
 

Similaire à Zend Framework repaginado: o que esperar da nova versão (20)

.NET Core + Docker: containers e seus benefícios no deployment de aplicações ...
.NET Core + Docker: containers e seus benefícios no deployment de aplicações ....NET Core + Docker: containers e seus benefícios no deployment de aplicações ...
.NET Core + Docker: containers e seus benefícios no deployment de aplicações ...
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigital
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | TDC Connections 2021
 
.NET Core + Docker: containers e seus benefícios no deployment de aplicações
.NET Core + Docker: containers e seus benefícios no deployment de aplicações.NET Core + Docker: containers e seus benefícios no deployment de aplicações
.NET Core + Docker: containers e seus benefícios no deployment de aplicações
 
Python na Nuvem
Python na NuvemPython na Nuvem
Python na Nuvem
 
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
 
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
 
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
 
Dicas de otimização para aplicações Qt
Dicas de otimização para aplicações QtDicas de otimização para aplicações Qt
Dicas de otimização para aplicações Qt
 
Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8 Tudo que você precisa saber sobre as principais alterações no Drupal 8
Tudo que você precisa saber sobre as principais alterações no Drupal 8
 
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
Docker para Ambientes de Desenvolvimento e Testes - Open Source Roadshow 2019...
 
Tdd On Rails
Tdd On RailsTdd On Rails
Tdd On Rails
 
Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?
 
Reduzindo Custos e Aumentando a Produtividade com Ambientes de Dev / Test na ...
Reduzindo Custos e Aumentando a Produtividade com Ambientes de Dev / Test na ...Reduzindo Custos e Aumentando a Produtividade com Ambientes de Dev / Test na ...
Reduzindo Custos e Aumentando a Produtividade com Ambientes de Dev / Test na ...
 
Docker e Kubernetes: Dicas e Truques - Dezembro-2019
Docker e Kubernetes: Dicas e Truques - Dezembro-2019Docker e Kubernetes: Dicas e Truques - Dezembro-2019
Docker e Kubernetes: Dicas e Truques - Dezembro-2019
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016
 
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
 
De zero a cem em cloud computing transformando idéias em aplicações em pouco...
De zero a cem em cloud computing  transformando idéias em aplicações em pouco...De zero a cem em cloud computing  transformando idéias em aplicações em pouco...
De zero a cem em cloud computing transformando idéias em aplicações em pouco...
 

Plus de Domingos Teruel

Taxonomias e Tipos de Conteúdos com WordPress 3
Taxonomias e Tipos de Conteúdos com WordPress 3Taxonomias e Tipos de Conteúdos com WordPress 3
Taxonomias e Tipos de Conteúdos com WordPress 3Domingos Teruel
 
Desmistificando o Framework da Zend
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da ZendDomingos Teruel
 
Desenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend FrameworkDesenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend FrameworkDomingos Teruel
 
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User InterfaceDesenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User InterfaceDomingos Teruel
 
Desenvolvendo Aplicativos com Zend Framework e banco de dados CDS/ISIS
Desenvolvendo Aplicativos com  Zend Framework  e banco de dados CDS/ISISDesenvolvendo Aplicativos com  Zend Framework  e banco de dados CDS/ISIS
Desenvolvendo Aplicativos com Zend Framework e banco de dados CDS/ISISDomingos Teruel
 
Desenvolvendo aplicações PHP, AJAX e YUI! Yahoo User Interface
Desenvolvendo aplicações PHP, AJAX e YUI! Yahoo User InterfaceDesenvolvendo aplicações PHP, AJAX e YUI! Yahoo User Interface
Desenvolvendo aplicações PHP, AJAX e YUI! Yahoo User InterfaceDomingos Teruel
 
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User InterfaceDesenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User InterfaceDomingos Teruel
 

Plus de Domingos Teruel (7)

Taxonomias e Tipos de Conteúdos com WordPress 3
Taxonomias e Tipos de Conteúdos com WordPress 3Taxonomias e Tipos de Conteúdos com WordPress 3
Taxonomias e Tipos de Conteúdos com WordPress 3
 
Desmistificando o Framework da Zend
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da Zend
 
Desenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend FrameworkDesenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend Framework
 
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User InterfaceDesenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
 
Desenvolvendo Aplicativos com Zend Framework e banco de dados CDS/ISIS
Desenvolvendo Aplicativos com  Zend Framework  e banco de dados CDS/ISISDesenvolvendo Aplicativos com  Zend Framework  e banco de dados CDS/ISIS
Desenvolvendo Aplicativos com Zend Framework e banco de dados CDS/ISIS
 
Desenvolvendo aplicações PHP, AJAX e YUI! Yahoo User Interface
Desenvolvendo aplicações PHP, AJAX e YUI! Yahoo User InterfaceDesenvolvendo aplicações PHP, AJAX e YUI! Yahoo User Interface
Desenvolvendo aplicações PHP, AJAX e YUI! Yahoo User Interface
 
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User InterfaceDesenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
 

Zend Framework repaginado: o que esperar da nova versão

  • 1. Zend Framework repaginado, o que esperar da nova versão Domingos Teruel quarta-feira, 29 de agosto de 12 1
  • 2. O Palestrante quarta-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 coisas quarta-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 Framework quarta-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 REST quarta-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 ContextSwitch quarta-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 Stack quarta-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 Comunidade quarta-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 comunidade quarta-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 Section quarta-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 Comunidade quarta-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 SimpleCloud quarta-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
  • 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
  • 21. Focar na melhoria da consistência e perfomance quarta-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ário quarta-feira, 29 de agosto de 12 23
  • 24. Reescrever somente onde faz sentido quarta-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|pos quarta-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/ session quarta-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 suportados quarta-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 extensibilidade quarta-feira, 29 de agosto de 12 30
  • 31. Exemplos • SignalSlot • FilterChain • SPL Extension (SplStack, SplQueue) • PluginBroker quarta-feira, 29 de agosto de 12 31
  • 33. Magia por muitas vezes pode ser muito inigmática quarta-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
  • 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ção quarta-feira, 29 de agosto de 12 37
  • 38. Otimização para perfomance quarta-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.0 quarta-feira, 29 de agosto de 12 39
  • 41. Namespaces • Nomes de classes relativamente grandes • Zend_Form_Element_HtmlArea_Interface quarta-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 strings quarta-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ódigo quarta-feira, 29 de agosto de 12 43
  • 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 todo quarta-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 Exception quarta-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
  • 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 erros quarta-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__ . 'indexmodels Objeto.php' ); //Mapa de Classes require_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 Plugins quarta-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 Validadores quarta-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 descobertos quarta-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 Plugins quarta-feira, 29 de agosto de 12 56
  • 57. namespace MeuComponente use ZendLoaderPluginClassLoader, ZendLoaderPluginBroker; class ComponentLoader extends PluginClassLoader { protected $plugins = arry( 'soo' => 'MeuComponenteBla', 'soo_bla' => 'MeuComponenteSooBla' ); } quarta-feira, 29 de agosto de 12 57
  • 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ó vez quarta-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ção quarta-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 arquiteturas quarta-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 objeto quarta-feira, 29 de agosto de 12 65
  • 66. DI vs DIC • Di é um pattern; • Dic (Container) é uma ferramenta quarta-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 container quarta-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 controlador quarta-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ção quarta-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.br quarta-feira, 29 de agosto de 12 75
  • 76. Obrigado! http://about.me/mingomax http://slideshare.net/mingomax quarta-feira, 29 de agosto de 12 76