padroẽs de projeto em php - importância e implementação
DESCRIPTION
Apresentação sobre padrões de projeto com exemplos em PHP para a IX Conferência Latino-Americana de Software Livre, em 17/10/2012.TRANSCRIPT
![Page 1: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/1.jpg)
E aí, pessoal?E aí, pessoal?
Jota Júnior
www.jotajunior.net
www.jotajunior.net/latinoware
![Page 2: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/2.jpg)
Padrões de Projeto em PHP: Padrões de Projeto em PHP: Importância e implementaçãoImportância e implementação
![Page 3: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/3.jpg)
Por que seguir isso ?!Por que seguir isso ?!
The code you write makes you a programmer. The code you delete makes you a good one. The code you don't have to write makes you a great one.
- Mario Fusco
→ Bom programador (capacidade de abstração)
→ Reutilização de código
→ Trabalho em equipe
→ O poder da Mãe Diná
WTF
![Page 4: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/4.jpg)
Por que seguir isso?
“Sempre escreva seu código como se o cara que irá mantê-lo fosse um psicopata violento que sabe onde você mora.”
- Martin Golding
“As vezes ele é...”
– Jota Júnior
![Page 5: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/5.jpg)
ConceituaçãoConceituação
Padrões de Projeto são regras de modelação do software
Não são sobre o código em si, são conceitos
Marca registrada de um bom programador
Aplicáveis a quase todas as linguagens
![Page 6: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/6.jpg)
Padrões abordadosPadrões abordados
Data Access Object (DAO)
Value Object (VO)
Singleton
Model-View-Controller (MVC)
![Page 7: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/7.jpg)
Conceituação do Conceituação do VValue alue OObjectbject
É um objeto feito para lidar com os atributos de uma classe
Atributos da classe se referem a campos de uma tabela do Banco de Dados
Centraliza o controle sobre o que será inserido no Banco de Dados.
Feito através de getters (feitos para resgatar os valores dos atributos) e setters (para manipular a inserção de valores nos atributos)
![Page 8: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/8.jpg)
VValue alue OObject (bject (VO)VO)
ProblemaProblemaVocê tem que manipular um dado antes de
inserir no BD, mas está tudo espalhado no sistema
SoluçãoSoluçãoCriar um objeto para lidar com a atribuição de
valores a variáveis que serão usadas em consultas ao BD
![Page 9: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/9.jpg)
Implementação do Value ObjectImplementação do Value Object
Como podem ver, foram criados apenas métodos para lidar com os atributos da classe, que se referem a campos do BD, que serão inseridos posteriormente.
É provavelmente a classe mais simples que você já fez.
![Page 10: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/10.jpg)
Ou assim...
Os métodos mágicos dão uma flexibilidade muito interessante, além de enxugar código.
![Page 11: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/11.jpg)
E como o Value Object pode me ajudar?E como o Value Object pode me ajudar?
Criará sistema de cadastro de usuários
Encriptará senha usando md5 e um SALT.
![Page 12: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/12.jpg)
E como o Value Object pode me ajudar?E como o Value Object pode me ajudar?
Operações com senha usadas em vários lugares do sistema.
![Page 13: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/13.jpg)
E como o Value Object pode me ajudar?E como o Value Object pode me ajudar?
Necessidade de usar um novo SALT.
Mudança feita manualmente, manutenção trabalhosa, repetição de código e controle descentralizado.
Qual a solução? VALUE OBJECT !
![Page 14: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/14.jpg)
Implementação do Value ObjectImplementação do Value Object
Controle centralizado.
Obs.: Alguns autores afirmam que os setters do VO têm que ser atribuídos no construtor da classe ou, como já apresentei, métodos mágicos.
![Page 15: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/15.jpg)
Conceito de imutabilidade em Value ObjectsConceito de imutabilidade em Value Objects
O Value Object também pode ser usado para conferir imutabilidade a uma classe e lidar com classes especiais, como dinheiro, data, etc.
Dois objetos são conceitualmente iguais quando contêm as mesmas informações
VO é único e imutável, qualquer alteração que faça no objeto retorna um novo objeto com as novas configurações da alteração.
Em suma, mudar um Value Object quer dizer criar um novo.
![Page 16: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/16.jpg)
Conceito de imutabilidade em Value ObjectsConceito de imutabilidade em Value Objects
Ao tentar mudar um Value Object, ele retorna um novo objeto com as propriedades da modificação.
Seta valor inicial que pertencerá
à classe Dinheiro.
![Page 17: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/17.jpg)
Como isso me ajudaria?Como isso me ajudaria?
Mudar salário somente de um programador.
![Page 18: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/18.jpg)
DData ata AAccess ccess OObject (DAO)bject (DAO)
ProblemaProblema
Requisições ao banco espalhadas desorganizadamente pelo código, dificultando a manutenção e causando duplicação.
SoluçãoSolução
Criar um objeto para gerenciar acesso aos dados do BD.
![Page 19: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/19.jpg)
Conceituação do DAOConceituação do DAO
Objeto para lidar com acesso a dados do BD
Recebe e retorna seu respectivo Value Object
Contém métodos de inserção, alteração, consulta e exclusão de registros.
Centraliza manipulação de queries
Evita duplicação de código
![Page 20: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/20.jpg)
E como o DAO pode me ajudar?E como o DAO pode me ajudar?
Situação:Situação:
Há a necessidade de trocar de banco de dados
A sintaxe das queries muda de um para outro
![Page 21: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/21.jpg)
E como o DAO pode me ajudar?E como o DAO pode me ajudar?
Queries espalhadas por todo o sistema
Ao mudar sintaxe, trabalho de mudar em vários arquivos as mesmas queries
![Page 22: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/22.jpg)
Implementação do DAOImplementação do DAO
![Page 23: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/23.jpg)
E como o DAO pode me ajudar?E como o DAO pode me ajudar?
Reafirmando, recebe e retorna um Value Object.
Só mudar a query aqui, e usar o método pelo sistema.
![Page 24: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/24.jpg)
MModel-odel-VView-iew-CController (MVC)ontroller (MVC)
ProblemaProblemaSeu sistema é integrado de uma forma em que
a parte que retorna o HTML é misturada com a parte lógica e a parte que recebe dados do usuário.
SoluçãoSolução Dividir estrutura do sistema em domínios, em
que cada domínio, separando a ‘mistura’ acima citada.
![Page 25: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/25.jpg)
Conceituação do MVCConceituação do MVC
Mais complexo que os demais vistos
Absorvida depois de treino sólido, não sairá daqui mestre em MVC
Usado na maioria dos Frameworks atuais
Separa a lógica da aplicação da lógica de exibição e da lógica de controle decisional.
![Page 26: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/26.jpg)
Implementação do MVCImplementação do MVC
O usuário inicia uma ação, chamando o Controller;
Obs.: Apenas métodos genéricos para exemplificar.
![Page 27: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/27.jpg)
Implementação do MVCImplementação do MVC Finalmente, o View é chamado, e mostra ao usuário as mudanças
que ele efetuou.
No caso, mudança efetuada foi o cadastramento de um novo usuário.
![Page 28: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/28.jpg)
Implementação do MVCImplementação do MVC
A ação que ele requisitou é interpretada é manipulada pelo Model, que abriga a lógica real da aplicação;
O Model que lida com interações com o banco de dados.
![Page 29: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/29.jpg)
Conceituação do MVCConceituação do MVC
É possível integrar outros padrões de projeto às suas camadas
No View, por exemplo, é possível (e até aconselhável) utilizar template engines como Smarty
Separar diretórios por camadas, por exemplo, um diretório somente para os controllers das classes, e assim em diante
![Page 30: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/30.jpg)
E como o MVC pode me ajudar?E como o MVC pode me ajudar?
Exemplo de implementação já exposto anteriormente
Ao separar a lógica do HTML e unir pelo controller, divide tarefas e torna a manutenção e aplicação de novas tecnologias mais fácil (como usar Smarty ou trocar por outra template engine, no View)
![Page 31: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/31.jpg)
SingletonSingleton
ProblemaProblemaÉ necessário que uma instância persista em
toda parte da aplicação sem ser duplicado, mas fica se duplicando.
SoluçãoSoluçãoCria-se um atributo privado para abrigar a
instância e um método para retorná-la. Ambos são estáticos.
![Page 32: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/32.jpg)
Conceituação do SingletonConceituação do Singleton
Feito para retornar sempre a mesma instância
O atributo e método são estáticos para poderem ser acessados sem instanciar um novo objeto, assim evitando a duplicação.
É um modelo aplicável a quase qualquer classe
Limitação: funciona somente em tempo de execução
![Page 33: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/33.jpg)
Exemplo de Implementação do SingletonExemplo de Implementação do Singleton
Necessário criar conexão com o banco de dados
Usar a mesma conexão em vários lugares diferentes do sistema
![Page 34: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/34.jpg)
Exemplo de implementação do SingletonExemplo de implementação do Singleton
Abriga instância
Retorna instância
![Page 35: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/35.jpg)
Considerações FinaisConsiderações Finais
Importância dos padrões de projeto
Vários podem ser usados ao mesmo tempo
Adaptá-los da forma mais eficiente é a marca de um bom programador
![Page 36: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/36.jpg)
Agora já sei padrões de projeto!Agora já sei padrões de projeto!
Só que não!
![Page 37: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/37.jpg)
![Page 38: Padroẽs de Projeto em PHP - Importância e implementação](https://reader034.vdocuments.pub/reader034/viewer/2022051413/559c928e1a28ab525b8b47d5/html5/thumbnails/38.jpg)