Anti-patterns
-
Upload
ricardo-banffy -
Category
Software
-
view
161 -
download
0
Transcript of Anti-patterns
![Page 1: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/1.jpg)
Anti-patternsObservando diretamente o efeito Dunning-Kruger
no ecossistema de software
![Page 2: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/2.jpg)
Padrões de projeto• Exemplificam boas idéias
• Dão nomes a estas idéias - facilitando a comunicação
• “objeto que, quando muda, chama um callback que outros objetos registraram para serem notificados quando algo muda” x “um observable”
• Servem de inspiração (evitando o que vem a seguir)
![Page 3: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/3.jpg)
![Page 4: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/4.jpg)
Os anti-padrões
• Idéias ruins
• Implementações ruins
• Às vezes decorrem do “poder inexpressivo” da linguagem
• Uma vez instalados
![Page 5: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/5.jpg)
![Page 6: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/6.jpg)
A classe biblioteca• Às vezes, tudo o que você quer são funções
simples
• Algumas linguagens não deixa(va)m você ter funções simples
• Tende a se tornar infinitamente grande, recebendo múltiplas implementações de funções quase idênticas
![Page 7: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/7.jpg)
![Page 8: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/8.jpg)
O verniz
• Encapsula outra coisa, sem acrescentar ou modificar nenhum comportamento
• É um vício comum quando se programa em torno de objetos persistentes
• Invariavelmente associado ao
![Page 9: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/9.jpg)
![Page 10: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/10.jpg)
Controlador de uma coisa só• É a classe que implementa os métodos que
deveriam estar na classe verniz
• Nunca poderia ser usada com uma outra classe verniz porque os métodos (pelo menos alguns deles) implementam comportamento específico daquele tipo de entidade
• A classe verniz não pode (nem deve, porque todas as regras estão no controlador) ser usada sozinha
![Page 11: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/11.jpg)
![Page 12: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/12.jpg)
Valores mágicos
• Um misto de referência externa e enum
• Às vezes é uma referência externa, em outras, um enum
![Page 13: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/13.jpg)
![Page 14: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/14.jpg)
if (campaign_id === -1) { do_something_different();} else { act_normally();}
![Page 15: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/15.jpg)
![Page 16: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/16.jpg)
if (campaign_id === -1) { do_something_different();} else if (campaign_id == -2) { do_something_else_different();} else { act_normally();}
![Page 17: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/17.jpg)
![Page 18: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/18.jpg)
if (campaign_id === -1) { do_something_different();} else if (campaign_id == -2 || campaign_id <= -10) { do_something_else_different();} else { act_normally();}
![Page 19: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/19.jpg)
![Page 20: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/20.jpg)
if (campaign_id === GLOBAL) { do_something_different();} else if (campaign_id == OTHER || campaign_id <= DIFFERENT) { do_something_else_different();} else { act_normally();}
![Page 21: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/21.jpg)
![Page 22: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/22.jpg)
O que fazer?
• Catalogar
• http://c2.com/cgi/wiki?AntiPatternsCatalog
• http://thedailywtf.com
• É sério
![Page 23: Anti-patterns](https://reader033.fdocumentos.tips/reader033/viewer/2022052905/5583fba9d8b42afa438b53dd/html5/thumbnails/23.jpg)
about.me/rbanffy