MVC com Zend Framework - PHP Conference Brasil 2010
1. MVC com Zend Framework
Flávio Gomes da Silva Lisboa
@fgsl
www.fgsl.eti.br
@fgsl
A reprodução é livre, apenas cite a fonte
Mickey, Donald Duck & Goofy by Walt Disney
4. Aplicações...Web
A reprodução é livre, apenas cite a fonte
@fgsl
adrformacion.com
tareadeinformatica-julia.blogspot.com
altecnet.com.br
freecoloringsheets.net
6. A reprodução é livre, apenas cite a fonte
@fgsl
Aplicações são como cebolas...
Shrek by Dreamworks
Cebolinha by Maurício de Sousa
hortifrutibrasil.blogspot.com
7. A reprodução é livre, apenas cite a fonte
@fgsl
… elas têm camadas!
mais-objetiva.blogspot.com
8. A reprodução é livre, apenas cite a fonte
@fgsl
Mas pra quê camadas?
manequim.abril.com.br
copacabanadetoledo.blogger.com.br
9. A reprodução é livre, apenas cite a fonte
@fgsl
O que são camadas?
Martin Fowler
camadas são “os subsistemas
principais no software
dispostos de forma parecida
com camadas de um bolo,
em que cada camada repousa
sobre uma camada mais
baixa”
10. A reprodução é livre, apenas cite a fonte
@fgsl
Vantagens de usar camadas
►Compreensão de uma única camada como um todo
coerente sem necessidade de saber muito sobre as demais
camadas.
►Uma camada pode ser substituída por implementações
alternativas dos mesmos serviços básicos.
►O uso de camadas diminui a dependência entre as partes
de um sistema
►Camadas são bons lugares para definir padrões.
►Uma vez construída, uma camada pode ser usada por
muitos serviços de nível mais alto.
11. A reprodução é livre, apenas cite a fonte
@fgsl
Camadas de uma aplicação
Recursos Externos
Objetos de acesso a dados
Mapeadores, repositórios
e scritps de transação
Modelos de domínio
e Entidades
Controle de fluxo
da aplicação
Apresentação
ou exposição de serviço
12. A reprodução é livre, apenas cite a fonte
@fgsl
E pra quê tudo isso?
Porque só
existe uma
certeza no
mundo do
software...
13. A reprodução é livre, apenas cite a fonte
@fgsl
O cliente vai pedir alterações...
Eu te amo, você é perfeito...
...mas quero que você mude.
Fonte: http://2.bp.blogspot.com/_UM47dm0ECOE/SK1mPgTEzaI/AAAAAAAAAo8/yf2scl7XEQ4/s400/amor+meu+grande+amor.jpg
14. A reprodução é livre, apenas cite a fonte
@fgsl
O cliente vai pedir mais alterações...
Mas fizemos um sistema que funciona, o cliente
disse que estava ótimo... e agora temos que fazer
mais alterações?
Fonte: http://galeria.brfoto.com.br/data/1/choro_sem_cor.jpg
18. @fgsl
A reprodução é livre, apenas cite a fonte
RESISTIR É INÚTIL!
Se a mudança é a única certeza, a questão é:
Como mudar da melhor forma possível?
matutando.com
19. @fgsl
A reprodução é livre, apenas cite a fonte
Melhor mudança
●Custa pouco
●Leva menos tempo
●Cria o menor impacto na aplicação
Fonte: http://aliceprina.files.wordpress.com/2007/09/mudanca-web2.jpg
20. @fgsl
A reprodução é livre, apenas cite a fonte
Práticas que dificultam mudanças
Criação de objetos pela especificação explícita
de uma classe.
Dependências de uma plataforma de hardware e
software específica.
Dependência de algoritmos específicos.
Acoplamento forte de classes.
21. @fgsl
A reprodução é livre, apenas cite a fonte
Tempo
Algo que você já não tem
Algo que você cada dia tem menos
taocentro.blogspot.com
oitopassos.com
22. @fgsl
A reprodução é livre, apenas cite a fonte
Complexidade
Algo que só tende a aumentar
23. @fgsl
A reprodução é livre, apenas cite a fonte
Por isso, não invente!
eladioebruna.blogspot.com
24. @fgsl
A reprodução é livre, apenas cite a fonte
Reuse!
mosaico.blogs.ie
dvdnear.com
produto.mercadolivre.com.br
19371973
25. @fgsl
A reprodução é livre, apenas cite a fonte
Reuse!
He-Man, Skeletor and Battle Cat by Mattel
De novo
essa
cena?
26. @fgsl
A reprodução é livre, apenas cite a fonte
Reuse!
ivancarlo.blogspot.com fortressofbaileytude.com
John Byrne - 1980 George Pérez - 1985
27. @fgsl
A reprodução é livre, apenas cite a fonte
Reuse!
http://www.coverbrowser.com/top/cool
John Buscema - 1968 John Byrne - 1989
28. @fgsl
A reprodução é livre, apenas cite a fonte
Reuse!
http://www.interney.net/blogs/melhoresdomundo/2008/05/21/alex_ross_chupinha_de_novo
Capas de
John Byrne
29. @fgsl
A reprodução é livre, apenas cite a fonte
Reutilização
“O movimento para o
desenvolvimento baseado
em reuso foi uma resposta
às demandas por menores
custos de produção e
manutenção de software,
entregas mais rápidas de
sistemas e aumento da
qualidade do software”.
Ian Sommerville
30. @fgsl
A reprodução é livre, apenas cite a fonte
De código
De desenho
010101011101101010101
111010010110110010101
010110101110101010101
001011111010110101010
110101010000011111001
011111010000110101010
101011110010101010100
011101010101010101110
001110101010101010101
010110101010101011111
Nonono
nonnon
nonono
nononno
Tipos de Reutilização
31. @fgsl
A reprodução é livre, apenas cite a fonte
Tipos de Reutilização
De objetos, quando módulos de código binário
de interface padronizada são reaproveitados;
De classes, o reaproveitamento de classes
fundamentais e bibliotecas-padrão;
De plataformas, que se refere ao
reaproveitamento de camadas inteiras da
arquitetura de uma aplicação.
32. @fgsl
A reprodução é livre, apenas cite a fonte
Padrões
“Padrões para componentes
reusáveis facilitam o reuso”
33. @fgsl
A reprodução é livre, apenas cite a fonte
Padrões
“Padrão é uma maneira de fazer algo, ou de
buscar um objetivo. Em qualquer atividade que já
esteja madura ou em vias de amadurecer,
encontraremos métodos eficazes comuns para
atingir objetivos e para resolver problemas em
vários contextos”
Steven John Metsker
34. @fgsl
A reprodução é livre, apenas cite a fonte
Padrões
Reduzem a complexidade, fornecendo
abstrações prontas;
Reduzem os erros, institucionalizando os
detalhes de soluções comuns;
Fornecem valor heurístico, sugerindo
alternativas de design;
Otimizam a comunicação, movendo o
diálogo do projeto para um nível mais alto.
Steve McConnell
35. @fgsl
A reprodução é livre, apenas cite a fonte
MVC é um padrão de projeto
symfony-project.org
Mas as camadas
não tem que estar
uma em cima da
outra?
Não necessariamente.
36. A reprodução é livre, apenas cite a fonte
@fgsl
MVC é só a ponta do iceberg...
Recursos Externos
Objetos de acesso a dados
Mapeadores, repositórios
e scritps de transação
Modelos de domínio
e Entidades
Controle de fluxo
da aplicação
Apresentação
ou exposição de serviço
M
C
V
37. A reprodução é livre, apenas cite a fonte
@fgsl
Não se engane com a figura!
Não tem só 1 modelo, 1 visão e 1 controlador.
38. A reprodução é livre, apenas cite a fonte
@fgsl
Tem mais coisa!
N
N
N
39. A reprodução é livre, apenas cite a fonte
@fgsl
Uma aplicação tem vários problemas...
...por isso precisa de vários padrões de projeto
Justile League of America, by DC Comics
40. A reprodução é livre, apenas cite a fonte
@fgsl
Software Baseado em Padrão
Para viabilizar o projeto de
software baseado em
padrão, “pode ser
necessário fornecer uma
infraestrutura do esqueleto
de implementação
específica, chamada de
arcabouço (framework)”.
Roger S. Pressman
41. A reprodução é livre, apenas cite a fonte
@fgsl
Framework
“O framework dita a arquitetura de
sua aplicação. Ele irá definir a
estrutura geral, sua divisão em
classes e objetos e em consequência
as responsabilidades-chave das
classes de objetos, como estas
colaboram, e o fluxo de controle.
Um framework predefine esses
parâmetros de projeto, de maneira
que o projetista ou implementador da
aplicação, possa se concentrar nos
aspectos específicos da mesma”.
(Gangue dos Quatro)
Royal Flush Gang, by DC Comics
Gangue dos Quatro
42. A reprodução é livre, apenas cite a fonte
@fgsl
Inversão de Controle
43. A reprodução é livre, apenas cite a fonte
@fgsl
Inversão de Controle
A inversão de controle estabelece a diferença
entre toolkits ou bibliotecas de sub-rotinas e
frameworks. Nas primeiras, o desenvolvedor
escreve o corpo principal da aplicação e chama o
código que quer reutilizar. No último, o
desenvolvedor reutiliza o corpo principal e
escreve o código que o framework chama.
44. A reprodução é livre, apenas cite a fonte
@fgsl
Criação de objetos de forma indireta.
Não depende de uma plataforma de hardware e
software específica (é PHP né? Dooh!).
Não depende de suas próprias implementações.
Acoplamento fraco de classes.
45. A reprodução é livre, apenas cite a fonte
@fgsl
desciclopedia.org
Zend
Db
Zend
Service
Zend
Soap
Zend
Rest
Zend
XmlRpc
Zend
Controller
Page
Zend
Controller
Front
Controller, Marvel Comics
Zend
View
Zend
Layout
Vision, Marvel Comics
46. A reprodução é livre, apenas cite a fonte
@fgsl
Zend
Controller
Front
Zend
Application
Zend
Config
Ini
Xml
Boostrap
Inicialização
Configuração
47. A reprodução é livre, apenas cite a fonte
@fgsl
Zend
Tool
Geração de código
48. A reprodução é livre, apenas cite a fonte
@fgsl
Além do MVC...
►Action Helpers
►View Helpers
►Plugins
►ViewRenderer
►Router
Spiderman, Marvel Comics
Doctor Strange, Marvel Comics
49. A reprodução é livre, apenas cite a fonte
@fgsl
Banco de Dados
►Zend_Db: Abstração da conexão com o banco
►Zend_Db_Statement: Consultas armazenadas
►Zend_Db_Select: SQL orientada a objeto
►Zend_Db_Table: Padrões Data Row Gateway, Data Table
Gateway, Data Mapper e Active Record.
vamoganhargalo.blogspot.com
oculistasoloptica.com
50. A reprodução é livre, apenas cite a fonte
@fgsl
Segurança
►Zend_Acl: Controle de Acesso
►Zend_Auth, Zend_Oauth e
Zend_OpenId: Autenticação
►Zend_Filter: Conversores de dados
►Zend_Captcha: Anti-robô
►Zend_Log:Auditoria
►Zend_Validate: Regras de validação
bahianoticias.com.br
51. A reprodução é livre, apenas cite a fonte
@fgsl
Diagnóstico e Manutenção
►Zend_Debug
►Zend_Log
antigo.campinas.sp.gov.br
52. A reprodução é livre, apenas cite a fonte
@fgsl
Formulários Dinâmicos
►Zend_Form
Suporte a filtros, validadores, grupos, subformulários,
configuração por arquivo e internacionalização.
Superman & Flash, DC Comics
es.gov.br
53. A reprodução é livre, apenas cite a fonte
@fgsl
Infraestrutura
►Zend_Config: Configuração por arquivos INI ou XML
►Zend_Exception: Exceção padrão
►Zend_Loader: Carregamento de classes e arquivos
►Zend_Registry: Variáveis globais
►Zend_Session: Controle da sessão
►Zend_Version: Adivinhe...
blogisticanoticias.blogspot.com
54. A reprodução é livre, apenas cite a fonte
@fgsl
Performance
►Zend_Cache
►Zend_Config
►Zend_Loader
►Zend_Memory
brickset.com
55. A reprodução é livre, apenas cite a fonte
@fgsl
Internacionalização
►Zend_Date
►Zend_Currency
►Zend_Locale
►Zend_Translate
blogalize.net
56. A reprodução é livre, apenas cite a fonte
@fgsl
E-mail
►Zend_Mail
frutobrasil.com.br
57. A reprodução é livre, apenas cite a fonte
@fgsl
Sistema de Busca
►Zend_Search_Lucene
baseado em
58. A reprodução é livre, apenas cite a fonte
@fgsl
Integração com
Flash Player
►Zend_Amf
59. A reprodução é livre, apenas cite a fonte
@fgsl
Integração com
Dojo Toolkit
►Zend_Dojo
60. A reprodução é livre, apenas cite a fonte
@fgsl
Integração com JQuery
►ZendX_JQuery
61. A reprodução é livre, apenas cite a fonte
@fgsl
Integração com PHPUnit
►Zend_Test
blog.censanet.com.brkavorka.wordpress.com
62. A reprodução é livre, apenas cite a fonte
@fgsl
Computação em Nuvem
Zend_Cloud
Zend_Service
kayllanyketly.blogspot.com
63. A reprodução é livre, apenas cite a fonte
@fgsl
E muito mais...
massageandoocerebro.wordpress.com
64. A reprodução é livre, apenas cite a fonte
@fgsl
Ah, mas o outro
framework
suporta PHP 4...
Chatotorix, de René Goscinny e Albert Uderzo