zend framework 2 - o que esperar da nova versão

76
Zend Framework repaginado, o que esperar da nova versão Domingos Teruel 1 quarta-feira, 29 de agosto de 12

Upload: domingos-teruel

Post on 22-Apr-2015

3.251 views

Category:

Documents


2 download

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.

TRANSCRIPT

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

Zend Framework repaginado, o que esperar

da nova versão

Domingos Teruel

1quarta-feira, 29 de agosto de 12

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

O Palestrante

2quarta-feira, 29 de agosto de 12

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

Agenda

• Um pouco de história

• O Futuro

• Novos padrões e velhos padrões

• Novos componentes

• Outras coisas

3quarta-feira, 29 de agosto de 12

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

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

4quarta-feira, 29 de agosto de 12

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

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

5quarta-feira, 29 de agosto de 12

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

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)

6quarta-feira, 29 de agosto de 12

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

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

7quarta-feira, 29 de agosto de 12

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

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)

8quarta-feira, 29 de agosto de 12

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

Um pouco de história

• Abril de 2009

• Released 1.8.0

• Zend_Tool e Zend_Aplication

• Full Stack

9quarta-feira, 29 de agosto de 12

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

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

10quarta-feira, 29 de agosto de 12

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

Um pouco de história

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

11quarta-feira, 29 de agosto de 12

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

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

12quarta-feira, 29 de agosto de 12

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

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

13quarta-feira, 29 de agosto de 12

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

Um pouco de história

• Novembro de 2010

• Novo release, 1.11

• Zend_Http_UserAgent

• Zend_Cloud

• API SimpleCloud

14quarta-feira, 29 de agosto de 12

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

Futuro?

15quarta-feira, 29 de agosto de 12

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

Daqui vamos para onde?

16quarta-feira, 29 de agosto de 12

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

Revolução17quarta-feira, 29 de agosto de 12

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

Evolução18quarta-feira, 29 de agosto de 12

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

“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”

19quarta-feira, 29 de agosto de 12

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

Melhorias incrementais

20quarta-feira, 29 de agosto de 12

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

Focar na melhoria da consistência e perfomance

21quarta-feira, 29 de agosto de 12

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

Passos de bebê

22quarta-feira, 29 de agosto de 12

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

• 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

23quarta-feira, 29 de agosto de 12

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

Reescrever somenteonde faz sentido

24quarta-feira, 29 de agosto de 12

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

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

25quarta-feira, 29 de agosto de 12

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

Zend_Session

• Padrão caixa-preta != testável

• Armazenamento do Namespace incompatível com $_SESSION

• Grandes incompatibilidades com ext/session

26quarta-feira, 29 de agosto de 12

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

<?phpuse Zend\Session\SessionManager, Zend\Session\SessionContainer as SessionContainer; $manager = new SessionManager(array( 'class' => 'Minha\Implementacao\SessionConfiguration', 'storage' => 'Minha\Implementacao\SessionStorage'));

$container = new SessionContainer('SessionIndex', $manager);$container['meuindice'] = 'meu conteudo';$container->setExpirationHops(20);

27quarta-feira, 29 de agosto de 12

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

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

28quarta-feira, 29 de agosto de 12

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

<?phpnamespace Zend\Validator;

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}

29quarta-feira, 29 de agosto de 12

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

Adição de novas funcionalidades que favoreçam a extensibilidade

30quarta-feira, 29 de agosto de 12

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

Exemplos

• SignalSlot

• FilterChain

• SPL Extension (SplStack, SplQueue)

• PluginBroker

31quarta-feira, 29 de agosto de 12

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

Explicitação de código

32quarta-feira, 29 de agosto de 12

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

Magia por muitas vezes pode ser

muito inigmática

33quarta-feira, 29 de agosto de 12

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

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* ...*/

34quarta-feira, 29 de agosto de 12

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

Mágica? Bruxaria?35quarta-feira, 29 de agosto de 12

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

class MeuController extends Zend_Controller_Action{ public function meuObjetoAction() { $this->view->meuobjeto = 'uma string qualquer'; }}

Quando entra os layouts?Quando

renderizar?

Onde isso está definido?

36quarta-feira, 29 de agosto de 12

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

• Código explícito

• Melhora o entendimento

• É mais fácil

• Facilita a análise

• Facilita sua manutenção

37quarta-feira, 29 de agosto de 12

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

Otimização para perfomance

38quarta-feira, 29 de agosto de 12

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

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

Requisições/Segundo

39quarta-feira, 29 de agosto de 12

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

Namespaces

40quarta-feira, 29 de agosto de 12

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

• Nomes de classes relativamente grandes

• Zend_Form_Element_HtmlArea_Interface

Namespaces

41quarta-feira, 29 de agosto de 12

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

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

42quarta-feira, 29 de agosto de 12

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

Importe classes com o comando use em vez de

fazer chamadas a require_once em seu código

43quarta-feira, 29 de agosto de 12

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

Exceções44quarta-feira, 29 de agosto de 12

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

• 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

Antigamente

45quarta-feira, 29 de agosto de 12

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

Nova abordagem

• Eliminação da Zend_Exception

• Interface Exception marcada por componente

• Exceções concretas residem em um subnamespace Exception estendendo da SPL Exception

46quarta-feira, 29 de agosto de 12

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

namespace Zend\EventManager\Exception;

use Zend\EventManager\Exception;

class InvalidaArgumentException extends \InvalidArgumentException implements Exception{ }

47quarta-feira, 29 de agosto de 12

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

namespace Zend\EventManager\Exception;

use Zend\EventManager\Exception;

try { $events->trigger('gera-exception',$objeto);}catch (InvalidArgumentException $e) { }catch (Exception $e) { }catch (\InvalidArgumentException $e) { }catch (\Exception $e) { }

48quarta-feira, 29 de agosto de 12

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

Autocarregamento

49quarta-feira, 29 de agosto de 12

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

• 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

Autocarregamento: Problemas

50quarta-feira, 29 de agosto de 12

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

• Fim dos require_once

• Múltipla abordagem de autocarregamento

• via include_path (ZF 1)

• Namespace / prefixo do fornecedor

• Mapa de Classes (Novo)

Autocarregamento: nova abordagem

51quarta-feira, 29 de agosto de 12

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

return array( 'Index/MeuController' => __DIR__ . 'index\controllers\MeuController.php' . 'Index\Model\Objeto' => __DIR__ . '\index\models\Objeto.php');

//Mapa de Classesrequire_once 'Zend/Loader/ClassMapAutoloader.php';

$loader = new \Zend\Loader\ClassMapAutoloader ( './.classmap.php');

$loader->register();

$objeto = new Index\Model\Objeto();

52quarta-feira, 29 de agosto de 12

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

Carregamento de Plugins

53quarta-feira, 29 de agosto de 12

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

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

54quarta-feira, 29 de agosto de 12

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

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

55quarta-feira, 29 de agosto de 12

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

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

56quarta-feira, 29 de agosto de 12

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

namespace Meu\Componente

use \Zend\Loader\PluginClassLoader, \Zend\Loader\PluginBroker; class ComponentLoader extends PluginClassLoader{ protected $plugins = arry( 'soo' => 'Meu\Componente\Bla', 'soo_bla' => '\Meu\Componente\SooBla' );}

57quarta-feira, 29 de agosto de 12

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

Novos Componentes58quarta-feira, 29 de agosto de 12

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

Zend\EventManager

59quarta-feira, 29 de agosto de 12

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

• Como introduzir debug/logging na aplicação?

• Como permitir implementação de caches pelos utilizadores?

• Como permitir utilizadores introduzam filtros e validação?

60quarta-feira, 29 de agosto de 12

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

• 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

EventManager: Premissas

61quarta-feira, 29 de agosto de 12

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

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

62quarta-feira, 29 de agosto de 12

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

EventManager: Casos de uso

• Implementação simples do padrão (pattern) observer;

• Implementação Orientada a Aspectos;

• Implementação de event-driven arquiteturas

63quarta-feira, 29 de agosto de 12

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

Dependency Injection (DI)

64quarta-feira, 29 de agosto de 12

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

DI - Simples definição

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

65quarta-feira, 29 de agosto de 12

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

DI vs DIC

• Di é um pattern;

• Dic (Container) é uma ferramenta

66quarta-feira, 29 de agosto de 12

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

• ZendDiDefinition

• Definições é o lugar onde ZendDi tenta compreender a estrutura do código.

67quarta-feira, 29 de agosto de 12

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

• Tirar os controladores MVC do container

Zend\Di: Caso de uso

68quarta-feira, 29 de agosto de 12

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

namespace Index\Controller; 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) } }

69quarta-feira, 29 de agosto de 12

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

class FrontController implements Dispatchable { public function __construct(DependencyInjection $di) { $this->id = $id; } public function dispatch(Request $request, Response = null) { /*...*/ $controller = $this->di->get($controllerName); /**..**/ } }

70quarta-feira, 29 de agosto de 12

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

• Perfomance

• Desacoplamento de código

• Simplificação do código do controlador

71quarta-feira, 29 de agosto de 12

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

• Refatoração e reescrita do MVC

• Internacionalização e Localização

• Testing

• Documentação

• Empacotamento

• Ferramentas de migração

Outras coisas

72quarta-feira, 29 de agosto de 12

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

ZF II Git

• Guia do git

• http://bit.ly/zf2gitguide

• GitHub

• http://github.com/zendframework/zf2

• CLA ainda necessário

73quarta-feira, 29 de agosto de 12

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

74quarta-feira, 29 de agosto de 12

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

PHPSC Conf 2012Sábado, 27 de outubro de 2012

http://conf.phpsc.com.br

75quarta-feira, 29 de agosto de 12

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

Obrigado!

http://about.me/mingomax

http://slideshare.net/mingomax

76quarta-feira, 29 de agosto de 12