Post on 26-May-2015
description
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
Quem sou eu
2007
2008 2009
A reprodução é livre, apenas cite a fonte
@fgsl
Aplicações...
A reprodução é livre, apenas cite a fonte
@fgsl
serventedepedreiro2.blogspot.com
Aplicações...Web
A reprodução é livre, apenas cite a fonte
@fgsl
adrformacion.com
tareadeinformatica-julia.blogspot.com
altecnet.com.br
freecoloringsheets.net
Momento Cultural
A reprodução é livre, apenas cite a fonte
@fgsl
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
A reprodução é livre, apenas cite a fonte
@fgsl
… elas têm camadas!
mais-objetiva.blogspot.com
A reprodução é livre, apenas cite a fonte
@fgsl
Mas pra quê camadas?
manequim.abril.com.br
copacabanadetoledo.blogger.com.br
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”
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.
A reprodução é livre, apenas cite a fonte
@fgsl
Camadas de uma aplicação
Recursos Externos
Objetos de acesso a dados
Mapeadores, repositóriose scritps de transação
Modelos de domínioe Entidades
Controle de fluxoda aplicação
Apresentaçãoou exposição de serviço
A reprodução é livre, apenas cite a fonte
@fgsl
E pra quê tudo isso?
Porque só existe uma certeza no mundo do software...
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
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
@fgsl
A reprodução é livre, apenas cite a fonte
RESISTIR É INÚTIL!
@fgsl
A reprodução é livre, apenas cite a fonte
RESISTIR É INÚTIL!
@fgsl
A reprodução é livre, apenas cite a fonte
RESISTIR É INÚTIL!
@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
@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
@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.
@fgsl
A reprodução é livre, apenas cite a fonte
Tempo
Algo que você já não temAlgo que você cada dia tem menos
taocentro.blogspot.com
oitopassos.com
@fgsl
A reprodução é livre, apenas cite a fonte
Complexidade
Algo que só tende a aumentar
@fgsl
A reprodução é livre, apenas cite a fonte
Por isso, não invente!
eladioebruna.blogspot.com
@fgsl
A reprodução é livre, apenas cite a fonte
Reuse!
mosaico.blogs.ie
dvdnear.com
produto.mercadolivre.com.br
19371973
@fgsl
A reprodução é livre, apenas cite a fonte
Reuse!
He-Man, Skeletor and Battle Cat by Mattel
De novo essa
cena?
@fgsl
A reprodução é livre, apenas cite a fonte
Reuse!
ivancarlo.blogspot.com fortressofbaileytude.com
John Byrne - 1980 George Pérez - 1985
@fgsl
A reprodução é livre, apenas cite a fonte
Reuse!
http://www.coverbrowser.com/top/cool
John Buscema - 1968 John Byrne - 1989
@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
@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
@fgsl
A reprodução é livre, apenas cite a fonte
De código
De desenho
010101011101101010101111010010110110010101010110101110101010101001011111010110101010110101010000011111001011111010000110101010101011110010101010100011101010101010101110001110101010101010101010110101010101011111
Nononononnonnonono
nononno
Tipos de Reutilização
@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.
@fgsl
A reprodução é livre, apenas cite a fonte
Padrões
“Padrões para componentes reusáveis facilitam o reuso”
@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
@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
@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.
A reprodução é livre, apenas cite a fonte
@fgsl
MVC é só a ponta do iceberg...
Recursos Externos
Objetos de acesso a dados
Mapeadores, repositóriose scritps de transação
Modelos de domínioe Entidades
Controle de fluxoda aplicação
Apresentaçãoou exposição de serviço
M
CV
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.
A reprodução é livre, apenas cite a fonte
@fgsl
Tem mais coisa!
N
N
N
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
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
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
A reprodução é livre, apenas cite a fonte
@fgsl
Inversão de Controle
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.
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.
A reprodução é livre, apenas cite a fonte
@fgsl
desciclopedia.org
ZendDb
ZendService
ZendSoap
ZendRest
ZendXmlRpc
ZendController
Page
ZendController
Front
Controller, Marvel Comics
ZendView
ZendLayout
Vision, Marvel Comics
A reprodução é livre, apenas cite a fonte
@fgsl
ZendController
Front
ZendApplication
ZendConfig
Ini
Xml
Boostrap Inicialização
Configuração
A reprodução é livre, apenas cite a fonte
@fgsl
ZendTool
Geração de código
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
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.comoculistasoloptica.com
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
A reprodução é livre, apenas cite a fonte
@fgsl
Diagnóstico e Manutenção►Zend_Debug►Zend_Log
antigo.campinas.sp.gov.br
A reprodução é livre, apenas cite a fonte
@fgsl
Formulários Dinâmicos►Zend_FormSuporte a filtros, validadores, grupos, subformulários, configuração por arquivo e internacionalização.
Superman & Flash, DC Comicses.gov.br
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
A reprodução é livre, apenas cite a fonte
@fgsl
Performance►Zend_Cache►Zend_Config►Zend_Loader►Zend_Memory
brickset.com
A reprodução é livre, apenas cite a fonte
@fgsl
Internacionalização►Zend_Date ►Zend_Currency►Zend_Locale►Zend_Translate
blogalize.net
A reprodução é livre, apenas cite a fonte
@fgsl
E-mail►Zend_Mail
frutobrasil.com.br
A reprodução é livre, apenas cite a fonte
@fgsl
Sistema de Busca►Zend_Search_Lucene
baseado em
A reprodução é livre, apenas cite a fonte
@fgsl
Integração com Flash Player
►Zend_Amf
A reprodução é livre, apenas cite a fonte
@fgsl
Integração com Dojo Toolkit
►Zend_Dojo
A reprodução é livre, apenas cite a fonte
@fgsl
Integração com JQuery►ZendX_JQuery
A reprodução é livre, apenas cite a fonte
@fgsl
Integração com PHPUnit►Zend_Test
blog.censanet.com.brkavorka.wordpress.com
A reprodução é livre, apenas cite a fonte
@fgsl
Computação em Nuvem
Zend_Cloud
Zend_Service
kayl
lany
ketly
. blo
gspo
t.com
A reprodução é livre, apenas cite a fonte
@fgsl
E muito mais...
massageandoocerebro.wordpress.com
A reprodução é livre, apenas cite a fonte
@fgsl
Ah, mas o outro framework
suporta PHP 4...
Chatotorix, de René Goscinny e Albert Uderzo
A reprodução é livre, apenas cite a fonte
@fgsl
Obrigado!
A reprodução é livre, apenas cite a fonte
@fgsl
www.fgsl.eti.br
Little Einsteins by Walt Disney