Desenvolvimento MVC com Zend Framework

Loading...

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

5 comments

Comments 1 - 5 of 5 previous next Post a comment

  • + wesleymilan Wesley Milan 2 weeks ago
    Em qualquer linguagem de programação existe o paradigma de desempenho X produtividade.
    Java é o exemplo mais claro disso. Além de ser uma linguagem criada a partir de conceitos acadêmicos ela é muito poderosa, mas complexa, tornando o desenvolvimento pouco produtivo. A solução para o java foram os diversos frameworks criados por diversas empresas. Mas isso acarretou em perda de desempenho das aplicações e um aumento grotesco nos custos de hardware para executar estas aplicações.
    O PHP é uma linguagem muito mais evoluída no meu ponto de vista, mas as facilidades de aprendizagem da linguagem fazem com que hajam muitos programadores despreparados no mercado, sem metodologias produtivas.
    O Zend Frame work está estabelecendo uma parametrização ao mercado de programadores PHP, isso vai ser muito útil para avaliar bons programadores em um futuro próximo.

    Diego, parabéns pela apresentação, a melhor que eu ví até agora sobre o tema, continue assim, abraços.
  • + guest2ca3d5 guest2ca3d5 3 months ago
    ótima apresentação, aderimos ao zf na empresa, produtividade aumentou e a manutenção nem se compara.
    aprovado e recomendado.
  • + felipernb Felipe Ribeiro 3 months ago
    Só divulguei os slides, mas já avisei ao criador para responder seu comentário Klaus :-)
  • + gueste1477f gueste1477f 3 months ago
    Desde quando desenvolver seu próprio framework é coisa de pseudo-programador?
    Boa palestra, mas cuidado com as afirmativas.
    Se não acredita em seu potencial não faça que outros descreiam dos seus.

    Abraços
    Klaus Matos
  • + guestc0cbdc guestc0cbdc 5 months ago
    Gosto do ZF, masssss...
    Você já percebeu que ele limita a linguagem fazendo o PHP perder 85% da Performance.
Post a comment
Embed Video
Edit your comment Cancel

11 Favorites

Desenvolvimento MVC com Zend Framework - Presentation Transcript

  1. Desenvolvendo em MVC com Zend Framework Diego Pessoa Desenvolvedor Web “Baseado na simplicidade, melhores práticas, licença corporativa amigável e um código-base rigorosamente testado. O Zend Framework provê componentes MVC ricos e flexíveis usando os recursos de Orientação a Objetos do PHP.” Copyright © 2008, Zend Technologies Inc
  2. Quem sou eu? Diego Pessoa  Desenvolvedor Web • Análise e Produção de Sistemas  Pesquisador ‐ NAV, CEFET‐PB • Produção de aplicações educacionais em  Zend Framework  Concluinte de Sistemas para  Internet no CEFET‐PB
  3. Frases de Pseudo-Programadores PHP • “PHP é muito fácil!” • “Não preciso de Orientação a Objetos, muito  menos frameworks, negócio complicado!” • “Meu projeto é simples, pra que padrões de  codificação, padrões de projeto e essas coisas?” • “Eu desenvolvo meu próprio Framework” • “O que importa é que funcione. O que cliente  não vai olhar o código!” • “Assim PHP fica parecendo Java, aff!”
  4. E na rotina dos programadores web... Chefe O programador anterior já tinha feito algo parecido, por que você não reutilizou? Eu preciso desse projeto pronto para ontém! OU TERMINA HOJE OU ESTÁ DEMITIDO! Chefinho, é que o código do programador antigo estava uma porcaria, preferi refazer do meu jeito! Mas é só você esperar um pouquinho que eu termino as funções de acesso ao banco de dados, validação de formulários e envio de e-mail. Pseudo‐Programador
  5. Resultado... Você está demi[do!!! FORA!
  6. E na rotina dos programadores web... Chefe Já contratei mais de 5 programadores, gastei uma grana preta e nenhum deles consegue fazer um simples sistema de compra de pacotes on-line, o cliente já está desesperado! Socorro! Deixa comigo! Bom Programador Web
  7. E na rotina dos programadores web... Como utilizo um framework, a parte básica já está pronta, me preocupo apenas com a lógica do negócio. Também reutilizei componentes de um sistema que já havia feito anteriormente modificando apenas a visão para o seu projeto. Que maravilha! Finalmente o meu site está pronto!
  8. Resultado... Parabéns! Você foi promovido!
  9. E você? Que tipo de programador é?! • Você consegue entender seu próprio  código? E os outros?! • Seu programa é documentado? • Mais importante, ele é testado!? • Você faz controle de código‐fonte? • Sua equipe produz eficientemente? • Você consegue reu[lizar seus códigos?!
  10. E você? Que tipo de programador é?! • FOCO no código, não se acomode ao ver  “funcionar”, só isso não basta! • Consistência • Legibilidade • Colaboração • Seja Obje[vo! • Encoraje o reuso!
  11. E você? Que tipo de programador é?! Prefiro fazer do meu jeito, criei meu próprio framework e uso os padrões que mais se encaixam na minha realidade.
  12. E você? Que tipo de programador é?! • Use um padrão pré‐estabelecido NÃO INVENTE SEU PRÓPRIO  PADRÃO. VOCÊ NÃO É  ESPECIAL E SEU CÓDIGO  PHP NÃO É ÚNICO!
  13. E você? Que tipo de programador é?! MORTE AOS FRAMEWORKS CASEIROS!
  14. E você? Que tipo de programador é?! Pense no Futuro...
  15. Seja simples! “As coisas devem ser feitas tão simples quanto for  possível, mas não de forma simplista.” Albert Einstein • Simples é mais fácil de usar • Simples é estável, menos propenso a erros • Simples é mais compa_vel • Simples é mais fácil de manter
  16. Um sonho... Não seria maravilhoso se todos os  programadores PHP do mundo  trabalhassem de uma forma  padronizada, de modo que pudessem  compar[lhar seus componentes e  reu[lizar milhares de linhas de código‐ fonte? Deve ser um sonho...
  17. MVC O Que é MVC?
  18. MVC Controle Modelo Visão
  19. MVC Modelo • O “conteúdo” que povoa sua aplicação: dados vindos do banco, Web Services, Feeds, etc. Visão • O que é mostrado ao usuário Controle • Gerencia o ambiente da requisição, e determina o que irá acontecer
  20. MVC Com MVC, você consegue dividir sua aplicação em camadas! Camadas? Como é isso?
  21. MVC Exemplo da vida real... Guarda‐roupa  em camada única Guarda‐roupa  em camadas dis[ntas
  22. MVC Exemplo do mundo virtual Código HTML em camada única
  23. MVC Exemplo do mundo virtual Código HTML em camadas separadas
  24. MVC Código PHP Spaghetti
  25. CÓDIGO PHP MVC
  26. CÓDIGO PHP MVC Você não programa em MVC ainda?
  27. Zend Framework Zend Framework Visão Geral
  28. Visão Geral Zend Framework provê uma estrutura de alta qualidade para o desenvolvimento de Aplicações Web e Web Services. Seguindo o espírito PHP, o Zend Framework dispõe de funcionalidades poderosas e fáceis de utilizar, com foco nos desafios da construção de uma aplicação web segura e moderna. http://framework.zend.com
  29. Visão Geral • Framework “Self-Service”: Use o que você precisa • Fácil integração com outros frameworks • Fracamente acoplado • Desenvolvido em PHP 5 • Implementa tendências da web atual (Web Services, Ajax, etc)
  30. Amigável aos Negócios • Acordo de Licença requerido aos que contribuem com código, atualizações ou documentações. • Todo o código é licenciado sob a licença new BSD (livre!). • Certificação oficial • Mantido ativamente pela ZEND
  31. O que é o Zend Framework? Estabilidade e Documentação • Todos os componentes são rigorosamente testados! • Todos os componentes devem ter documentações para o usuário e casos de uso
  32. O que é o Zend Framework? Estrutura de diretórios • A estrutura de diretórios é personalizável: Módulo gerencia, contendo os elementos MVC. Módulo site, contendo os elementos MVC. Pasta contendo arquivos de configuração Pasta para bibliotecas. Exemplo: Zend, Smarty, etc. Arquivos Públicos está[cos: imagens, java scripts, css, etc. Bootstrap File – Arquivo de inicialização
  33. Por que usar o Zend Framework? • Simples, porém poderoso • Toda a parte incômoda dos bits já está feita! • Possui componentes para a maioria das atividades rotineiras do desenvolvimento web • Projeto moderno: PHP 5, OO • Documentação completa e de fácil acesso • Foco na regra do negócio!
  34. Por que usar o Zend Framework? É um Framework, não apenas componentes • “Cola” para construir aplicações • Alta Produtividade • Componentes desenvolvidos e testados juntos Use somente o que você precisa, mas • Ele sempre será distribuído em sua totalidade Ainda possui fácil integração com outros  (PEAR, Smarty, etc)
  35. Não Confunda! Zend Framework != Zend Studio • É um Framework, não é uma IDE. Framework para construção civil
  36. Arquitetura
  37. O que há no Zend Framework? • Model View Controller • Dados: banco de dados, JSON, PDF, Busca • Internacionalização, datas, moedas • Web Services: consumo e disponibilização • Serviços de infra-estrutura: autenticação, listas de controle de acesso, cache, configuração, log, mail, session. e muito mais...
  38. Vantagens do Zend Framework? • Segue o padrão de codificação Zend • Todas as classes são completamente testadas com PHPUnit • Revisão por pares e aprovação de todo o código • Rica documentação on-line • Grupos, comunidades e listas de discussões • Projeto com apoio de grandes empresas
  39. Grandes empresas que usam o ZF Mais informações em: hhp://framework.zend.com/about/casestudies
  40. Zend Framework e MVC
  41. Zend Framework Zend_Controller, o ‘C’ do MVC
  42. Zend Framework - Controllers • Caminhos de URL Básicos: /controlador/acao /controlador/acao/parametro/valor /modulo/controlador/acao /modulo/controlador/acao/valor • Controller: Classe derivada de Zend_Controller_Action IndexController, PacotesController • Action: Método publico terminado com Action IndexAction, listarAction
  43. Zend Framework - Controllers Simplificando: Ao acessar:  seusite.com/blog/postar   o Zend Framework irá chamar o método  PostarAc[on da classe BlogController. Que legal! Sempre quis fazer  isso! Hoje eu crio páginas  “index.php” dentro de pastas  para fazer URLs amigáveis. Como o Zend faz isso? Mágica?
  44. O Padrão Front Controller • Manipula todas as requisições • Delega requisições para os ‘Page Controllers’ (controladores de ação) manipularem. • Devolve a resposta
  45. Zend_Controller_Front: Atribuições • O Zend implementa este padrão através da classe Zend_Controller_Front •Objeto Request: contém todas as informações sobre o ambiente de requisição • Objeto Router: decompõe o ambiente, separando o módulo, controlador e ação atuais. • Objeto Dispatcher: mapeia o roteamento para as classes controladoras de ação e métodos • Objeto Response: contém a resposta completa e tem habilidade para enviá-la.
  46. Zend_Controller_Front: Atribuições
  47. Zend_Controller_Front: Dispatcher • O método dispatch() manipula a entrada de requisições, ele é que faz a coisa funcionar! • Instancia objetos de requisição e resposta se não foram previamente configurados • Requisita Rotas • Entra em um laço despachante: Instancia o controlador de ação, chama o método de ação e despacha até que o objeto da requisição não possua mais ações a serem despachadas. • Retorna a Resposta
  48. Zend_Controller_Action Action Controllers: • Classes que estendem Zend_Controller_Action • O nome da classe termina em Controller • ClientesController, PacotesController • CamelCasing permitido • FooBarController • Separa as palavras CamelCased em URLs com ‘-’ (hífen) • foo-bar
  49. Zend_Controller_Action Controller Actions: • Método que o Action Controller deve executar • Métodos publicos que terminam em Action • listarAction, salvarAction • CamelCasing permitido • fooBarAction() • Separa as palavras CamelCased em URLs com ‘-’ (hífen) • foo-bar
  50. Zend_Controller_Action O controlador de Ação está preparado para tratar os seguintes eventos: init() : executado sempre que o objeto é instanciado. preDispach() : executado antes que a ação seja despachada postDispach() : executado depois que a ação seja despachada
  51. Zend_Controller_Action Métodos utilitários: _forward($action, $controller=null, $module=null, $params=null): repassa o processo para outra ação. _redirect($url): redireciona para outra URL _render ($action, $name, $noController): renderiza um script de visão alternativo _call($method, $params) : usado para criar ações dinâmicas ou desviar ações.
  52. Zend_Controller_Action Como assim renderizar um script de  visão alterna[vo? Como a visão é renderizada  normalmente?
  53. Zend_Controller_Action ViewRenderer • A integração com a Visão é automática • Registrado pelo action helper ViewRenderer • Pode ser desabilitado • A propriedade $view do controlador contém um objeto de visão • O objeto da visão pode ser obtido assim: Zend_Controller_Action_HelperBroker::getStatic Helper(‘viewRenderer’)
  54. Zend_Controller_Action Simplificando:  Para associar uma variável a um  controlador basta fazer isso:  $this‐>view‐>variavel = “valor”;   Com isso, na visão você poderá u[lizar: $this‐>variavel Isso vale para variáveis de qualquer [po,  de [pos primi[vos e coleções até  objetos.
  55. Zend_Controller_Action Peraí peraí!  Mas se é automá[co, como  ele sabe qual arquivo de visão  chamar?
  56. Zend_Controller_Action • Os view scripts são renderizados automaticamente durante o evento postDispatch() • View scripts são nomeados de acordo com o controlador e a ação: FooController::barAction() renderiza views/foo/ bar.phtml PacotesController::listarAction() renderiza views/ pacotes/listar.phtml Para desabilitar o ViewRenderer: setNoRender() ou chamar _forward() ou _redirect()
  57. Zend_Controller_Action O método listarAc[on do  IndexController irá chamar  a o arquivo de visão  listar.phtml que está na  pasta index dentro de  views/scripts.
  58. Zend_Controller_Action Customizando o ViewRenderer: setView(): Configura o objeto de visão (permite colocar outras implementações, exemplo: Smarty) setViewSuffix(): Altera o sufixo do arquivo usado setView(Base|Script)PatchSpec(): Configura a especificação do caminho das visões setResponseSegment(): Configura o seguemento de resposta nomeado para o qual renderizar.
  59. Zend_Controller_Action Módulos: Um conjunto de controladores de ação, modelos e visões relacionados. • Funciona como um sub-programa, contendo uma estrutura MVC dentro dele. • Nomes de classes controladoras devem ser prefixadas com o nome do módulo: Foo_PacotesController -> foo/controllers/ PacotesController.php * A prefixação não é necessária se o módulo for configurado como o “default” da aplicação
  60. Zend_Controller_Action Estrutura Modular: Os módulos podem  conversar entre si.
  61. Zend Framework Zend_View, o ‘V’ do MVC
  62. Zend_View: O ‘V’ do VMC Implemente Zend_View_Interface para criar seu próprio mecanismo de template A implementação padrão do Zend (Zend_View) usa PHP como linguagem de template Associa e recupera variáveis da visão como se elas fossem variáveis membro de um objeto: $view->content = $body; Acessa variáveis de visão em view scripts a partir do objeto $this <?=$this->content ?>
  63. Zend_View: O ‘V’ do VMC • Mistura HTML e PHP • Acessa variáveis de template usando $this • Mantém variáveis associadas no seu próprio escopo • Distingue variáveis associadas de variáveis locais Benefícios: Todo o PHP está a sua disposição Problemas: Todo o PHP está a sua disposição
  64. Zend_View: O ‘V’ do VMC Isso não está me cheirando  bem...
  65. Zend_View: O ‘V’ do VMC 5 mandamentos da visão: - Não instanciarás quaisquer classes dentro da visão - Não roubarás nenhum dado de modelo diretamente da visão - Jamais chamarás algum controlador direto da visão - Respeitai e honrai as regras de fluxo do MVC - É proibido utilizar métodos de leitura de arquivos, formatação ou similares.
  66. Zend_View: O ‘V’ do VMC A Visão é feita apenas para mostrar resultados, operações são feitas nos controladores! Caso queira fazer operações de exibição use os Helpers
  67. Zend_View - Helpers Quer uma mãozinha?
  68. Zend_View - Helpers O que são os Helpers? Classes que estendem a funcionalidade do Zend_View - Modelos de acesso (adiciona um feed del.icio.us à sua página) - Formata ou trata saída - Lógica de exibição (mostra botão de login se o usuário não estiver logado) - Snippets de exibição reutilizáveis (por exemplo, caixa de busca)
  69. Zend_Model Zend_Model, o ‘M’ do MVC
  70. Zend_Model O que é um modelo? • Banco de dados • Web Services • Feeds • Arquivos de Configuração • Sistema de Arquivos • Imagens
  71. Zend_Model Usando dados do banco como Modelo Zend_Db_Table • Implementa o padrão Table Gateway • Exerce controle total sobre operações na tabela (insert, update, delete, find, fetchAll, etc), basta indicar qual é a tabela relacionada!
  72. Zend_Model Exemplo: Vamos criar nosso sistema de pacotes:
  73. Zend_Model Temos 3 tabelas, isto significa que precisaremos de 3 arquivos do tipo Zend_Db_Table para mapeá-las. -PacotesModel -ClientesModel -ReservasModel
  74. Zend_Model Pronto! Só isso! Agora já podemos instanciar as nossas classes de modelo e usar os métodos correspondentes à tabela.
  75. Zend_Model Alguns Métodos de manipulação do Zend_Db_Table: insert(array $dados): insere um novo registro baseado nos campos da array recebida delete($string|$array): deleta o registro passado como parametro update(array $dados, $where): atualiza registros  baseado nos campos da array recebida
  76. Zend_Model Alguns Métodos de manipulação do Zend_Db_Table: fetchAll(string|array $where = null, $order = null, $count = null, $offset = null): busca lista de registros no banco de dados find($id): busca registro único pela chave primária info() : retorna informações da tabela createRow($array=null): Cria um novo registro na tabela
  77. Zend_Model Exemplos:
  78. Zend_Model Só isso?! Antes eu [nha que criar na mão  todas as queries para inserir,  editar, selecionar, apagar, etc.
  79. Zend_Model Mas peraí? Aonde isso é OO?  Você tá mandando array dentro  do insert, update, delete, etc.  Não tô vendo nada de objeto aí  não!
  80. Zend_Model O Zend também implementa o padrão Row Data Gateway através da classe Zend_Db_Table_Row. Com isso, você pode configurar cada linha da tabela como um objeto criado por você, já contando também, com vários métodos prontos disponíveis, restando implementar apenas a lógica da sua aplicação. Alguns métodos: save(): é responsável por persistir o objeto no banco delete(): responsável por deletar o objeto do banco
  81. Zend_Model O Zend_Db_Table_Row é uma classe PHP normal:
  82. Zend_Model Para ela ser interpretada, é necessário configurá-la na classe que herda a Zend_Db_Table_Abstract, exemplo:
  83. Zend_Model Resultado:
  84. Zend_Model Legal, mas, como eu faço o  relacionamento entre objetos?!  Afinal, a par[r da classe  Reservas eu tenho que acessar  o cliente e o pacote! Como fazer  isso?
  85. Relacionamento Entre Objetos Mapeamento Objeto‐Relacional
  86. Relacionamento entre objetos Vai me dizer que agora vou ter  que configurar arquivos XML  enormes e colocar anotações nas  minhas classes?
  87. Relacionamento entre objetos Lembra das nossas tabelas? Relacionamentos: Reservas 1 –> N Clientes Reservas 1 –> N Pacotes
  88. Relacionamento entre objetos A tabela Reservas se relaciona com duas tabelas (Clientes e Pacotes) Adicionamos à classe ReservasModel: Sendo assim, as tabelas Clientes e Pacotes são dependentes de Reservas Adicionamos às classes ClientesModel e PacotesModel:
  89. Relacionamento entre objetos Para acessar os objetos Clientes e Pacotes a partir de Reservas podemos utilizar dois métodos diferentes: findParentRow($objeto): através deste método acessamos o objeto que está mapeado no referenceMap. Exemplo: findParentRow(“Cliente”) ou findParentRow(“Pacote”) ou De uma forma mais elegante, utilizar o mecanismo de métodos dinâmicos do Zend: findParent<OBJETO_PROCURADO> Exemplo: findParentCliente();
  90. Relacionamento entre objetos Agora teremos:
  91. MVC com Zend Framework E é isso! Foi bom pra vocês?
  92. MVC com Zend Framework Foi uma delícia...
  93. MVC com Zend Framework PERGUNTAS?
  94. REFERÊNCIAS Lisboa, F. Zend Framework + PDF. 2008 Allen, R. Zend Framework Overview. 2008. O'Phinney, M. W. Zend Framework: Creating A CRUD Application. 28/02/2007. IDEM. Zend Framework MVC Quick Start. 09/10/2007.

+ Felipe RibeiroFelipe Ribeiro, 7 months ago

custom

4609 views, 11 favs, 6 embeds more stats

Apresentação feita por Diego Pessoa no I Encontro more

More Info

© All Rights Reserved

Go to text version
  • Total Views 4609
    • 4547 on SlideShare
    • 62 from embeds
  • Comments 5
  • Favorites 11
  • Downloads 383
Most viewed embeds
  • 26 views on http://www.diegopessoa.com
  • 16 views on http://weberscripts.blogspot.com
  • 13 views on http://dsprog.com
  • 4 views on http://static.slidesharecdn.com
  • 2 views on http://static.slideshare.net

more

All embeds
  • 26 views on http://www.diegopessoa.com
  • 16 views on http://weberscripts.blogspot.com
  • 13 views on http://dsprog.com
  • 4 views on http://static.slidesharecdn.com
  • 2 views on http://static.slideshare.net
  • 1 views on http://localhost

less

Flagged as inappropriate Flag as inappropriate
Flag as innappropriate

Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

Cancel

Categories