Anti-patterns

465 visualizações

Publicada em

Publicada em: Software

Anti-patterns

  1. 1. Anti-patterns Observando diretamente o efeito Dunning-Kruger no ecossistema de software
  2. 2. 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)
  3. 3. Os anti-padrões • Idéias ruins • Implementações ruins • Às vezes decorrem do “poder inexpressivo” da linguagem • Uma vez instalados
  4. 4. 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
  5. 5. 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
  6. 6. 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
  7. 7. Valores mágicos • Um misto de referência externa e enum • Às vezes é uma referência externa, em outras, um enum
  8. 8. if (campaign_id === -1) { do_something_different(); } else { act_normally(); }
  9. 9. if (campaign_id === -1) { do_something_different(); } else if (campaign_id == -2) { do_something_else_different(); } else { act_normally(); }
  10. 10. if (campaign_id === -1) { do_something_different(); } else if (campaign_id == -2 || campaign_id <= -10) { do_something_else_different(); } else { act_normally(); }
  11. 11. if (campaign_id === GLOBAL) { do_something_different(); } else if (campaign_id == OTHER || campaign_id <= DIFFERENT) { do_something_else_different(); } else { act_normally(); }
  12. 12. O que fazer? • Catalogar • http://c2.com/cgi/wiki?AntiPatternsCatalog • http://thedailywtf.com • É sério
  13. 13. about.me/rbanffy

×