MVC com Zend Framework - PHP Conference Brasil 2010

Post on 26-May-2015

981 views 3 download

description

Apresentação feita na 5ª PHP Conference Brasil

Transcript of MVC com Zend Framework - PHP Conference Brasil 2010

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