3. 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
WTF
→ Bom programador (capacidade de abstração)
→ Reutilização de código
→ Trabalho em equipe
→ O poder da Mãe Diná
4. 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
5. Conceituaçã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
7. Conceituação do Value Object
É 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)
8. Value Object (VO)
Problema
Você tem que manipular um dado antes de
inserir no BD, mas está tudo espalhado no
sistema
Solução
Criar um objeto para lidar com a atribuição de
valores a variáveis que serão usadas em
consultas ao BD
9. Implementaçã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.
10. Ou assim...
Os métodos
mágicos dão uma
flexibilidade muito
interessante, além
de enxugar
código.
11. E como o Value Object pode me ajudar?
Criará sistema de cadastro de usuários
Encriptará senha usando md5 e um SALT.
12. E como o Value Object pode me ajudar?
Operações com senha usadas em vários lugares do sistema.
13. 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 !
14. Implementaçã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.
15. Conceito 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.
16. Conceito de imutabilidade em Value Objects
Seta valor inicial que pertencerá
à classe Dinheiro.
Ao tentar mudar um Value Object, ele retorna um
novo objeto com as propriedades da modificação.
17. Como isso me ajudaria?
Mudar salário somente de um programador.
18. Data Access Object (DAO)
Problema
Requisições ao banco espalhadas
desorganizadamente pelo código, dificultando
a manutenção e causando duplicação.
Solução
Criar um objeto para gerenciar acesso aos
dados do BD.
19. Conceituaçã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
20. E como o DAO pode me ajudar?
Situação:
Há a necessidade de trocar de banco de
dados
A sintaxe das queries muda de um para outro
21. 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
23. E como o DAO pode me ajudar?
Só mudar a query
aqui, e usar o método
pelo sistema.
Reafirmando,
recebe e retorna um
Value Object.
24. Model-View-Controller (MVC)
Problema
Seu 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ção
Dividir estrutura do sistema em domínios, em
que cada domínio, separando a ‘mistura’ acima
citada.
25. Conceituaçã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.
26. Implementação do MVC
O usuário inicia uma ação, chamando o
Controller;
Obs.: Apenas métodos genéricos
para exemplificar.
27. Implementaçã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.
28. Implementaçã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.
29. Conceituaçã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
30. 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)
31. Singleton
Problema
É necessário que uma instância persista em
toda parte da aplicação sem ser duplicado, mas
fica se duplicando.
Solução
Cria-se um atributo privado para abrigar a
instância e um método para retorná-la. Ambos
são estáticos.
32. Conceituaçã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
33. Exemplo 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
35. Consideraçõ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