Anti-patterns

Preview:

Citation preview

Anti-patternsObservando diretamente o efeito Dunning-Kruger

no ecossistema de software

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)

Os anti-padrões

• Idéias ruins

• Implementações ruins

• Às vezes decorrem do “poder inexpressivo” da linguagem

• Uma vez instalados

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

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

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

Valores mágicos

• Um misto de referência externa e enum

• Às vezes é uma referência externa, em outras, um enum

if (campaign_id === -1) { do_something_different();} else { act_normally();}

if (campaign_id === -1) { do_something_different();} else if (campaign_id == -2) { do_something_else_different();} else { act_normally();}

if (campaign_id === -1) { do_something_different();} else if (campaign_id == -2 || campaign_id <= -10) { do_something_else_different();} else { act_normally();}

if (campaign_id === GLOBAL) { do_something_different();} else if (campaign_id == OTHER || campaign_id <= DIFFERENT) { do_something_else_different();} else { act_normally();}

O que fazer?

• Catalogar

• http://c2.com/cgi/wiki?AntiPatternsCatalog

• http://thedailywtf.com

• É sério

about.me/rbanffy