.NET - Anti-Patterns ou Anti-Padrões


Hoje eu vou falar sobre Anti-Patterns ou Anti-Padrões.

Obs: Estou escrevendo Anti-Patterns/Anti-Padroes ,mas não sei se esta é a forma correta de escrever; segundo a regra anterior deveríamos escrever antipatterns (só se usuaria o hifem antes do h, r e s e vogal í)

O termo Anti-Patterns foi criado em 1995 por Andrew Koenig, inspirado no livro da Gang of Four, que desenvolveram o conceito de padrão de projeto.

Um anti-pattern ou anti-padrão, como o próprio significado do termo sugere , significa algo contrário ao padrão. Seria isso mesmo ???

Em engenharia de software, um anti-padrão é uma solução semelhante a um padrão de projeto (Design Pattern) só que sua aplicação produz conseqüências negativas.

Assim um anti-padrão é uma solução pois resolve um problema só que de uma forma ineficiente.

Quem nunca viu ou ouviu falar na famosa 'gambiarra' ? Pois ela é o exemplo prático de um anti-padrão: resolve o problema mas é ineficiente e com certeza vai causar problemas a curto, médio e a longo prazo.

Para relaxar um pouco...

A Programação Orientada a Gambiarras (POG ou WOP – Workaround-oriented programming) é um paradigma da programa de  sistemas de software que integra-se perfeitamente a qualquer grande Paradigma de programação atual.

Por definição, Gambiarra é aquilo que é de difícil concepção, de inesperada execução para tornar fácil o uso de algo que sequer deveria existir.

A Programação Orientada a Gambiarras foi uma evolução natural do uso do  Programa bacalhau, também conhecido como ATND - "Artifício Técnico Não Documentado"

Para que um programador possa exercer a Programação Orientada a Gambiarras, são necessários alguns fatores específicos, facilmente encontrados em ambiente de desenvolvimento:

  • Sistemas originalmente mal projetados
  • clientes chatos
  • Usuários chatos
  • Falta de vontade
  • Falta de tempo
  • Gente que pensa que é DBA (normalmente são pessoas chatas, gordas, feias, sem certificação nenhuma e que fizeram um curso de SQL Básico)
  • Arquiteto de software achando que é o máximo (normalmente pessoas altas, loiras, chatas, arrogantes e metidos a sabe-tudo)
  • Término do estoque de café/chá
  • Aproximação do final da tarde
  • Véspera de feriado/fim-de-semana

Seria cômico senão fosse trágico.

Fonte: http://tiny.cc/10p4c

Os anti-padrões não são uma característica da engenharia de software (é claro) estão em todas as áreas; para ilustrar isso veja uma relação de anti-padrões sociais e de software:

Anti-Padrões Sociais Anti-Padrões de Software
Criminoso Código Espagueti
Terrorista Classes SuperPoderosas
Pervertido Botão Mágico
Traficante Anemic Model Model
Herético Grande bola de lama

O problema com os anti-padrões e que eles muitas vezes estão documentados e são usados como se fossem a solução para determinados tipos de problemas mas que acabam acarretando problemas maiores.

Seriam os anti-padrões um mal hábito ou uma má prática ?

Em essência não. Os anti-padrões são mais do que isso.

Vejamos algumas características dos anti-padrões:

- Os Anti-Padrões são soluções negativas que apresentam mais problemas do que se propõem a resolver;
- Os Anti-Padrões são uma extensão natural dos Padrões de Projeto;
(O maior perigo é quando a mentira se parece com  a verdade.)
- Os Anti-Padrões são a ponte entre a lacuna existente entre os conceitos de arquitetura e a implementação do mundo real;
- Os Anti-Padrões, apresentam uma solução comum que refaz o sistema de modo a maximizar os benefícios e minimizar as conseqüências (aspectos negativos);
- Os Anti-Padrões identificam abordagens técnicas equivocadas e práticas de desenvolvimento erradas que levam ao desenvolvimento de software de má qualidade e ao fracasso de projetos de software;

Compreender e conhecer os Anti-Padrões permite-nos evitá-los pois são uma armadilha que levam a situações desastrosas.

Dessa forma um Anti-Padrão é um Padrão de Projeto que pode (e infelizmente é) ser usado para resolver um problema mas é ineficiente e apresenta resultados negativos.

Mas o que faz com que , mesmo apresentando os problemas conhecidos, os anti-padrões continuem a serem usados ?

Vejamos as principais causas da utilização dos anti-padrões :

  1. Orgulho ( É só fazer do jeito que eu to falando que entregamos na data correta)
  2. Preguiça ( Fazer essa refatoração é muito complicado então deixa assim mesmo que vai dar certo)
  3. Pressa ( Não precisa testar tudo não, temos que entregar isso amanhã...)
  4. Ignorância (O que essa parte desse código faz mesmo ?)
  5. Desleixo ( Não quero nem saber, se compilou é porque funciona)
  6. Avareza ( Pra que gastar com mão de obra especializada, manda o estagiário fazer isso., o cara é fera)
  7. Irresponsabilidade (Se ninguém reclamou é porque está funcionando.) 

Na engenharia de Software os Anti-Padrões são divididos em três classes:(fonte: http://www.ime.usp.br/~kon/MAC5715/aulas/Aula6.html)

  1. Anti-Padrões de Desenvolvimento - relacionados à programação;
  1. Anti-Padrões Arquiteturais - relacionados à estrutura dos sistemas;
  1. Anti-Padrões Gerenciais - relacionados aos processos e métodos de desenvolvimento nas empresas e grupos de desenvolvimento de software;

Vejamos a seguir uma análise resumida de um anti-padrão muito conhecido e usado pelos desenvolvedores de software:

O anti-padrão código Espaguete (Spaghetti Code)

Definição:

Qualifica-se de código espaguete um programa de computador que não segue as regras da programação e abusa de desvios, condicionais ou não, o que torna a leitura do mesmo por seres humanos bem difícil. O sistema é difícil de entender, de manter e de testar.

Ele é conseqüência do estilo de adotados por muitos desenvolvedores: sentar na frente do computador e começar a programar.

Sintomas do padrão:

Causas Principais : Ignorância, Preguiça, Displicência;
Tipo da solução :  Refatoração do Software;
Nome da solução :  Software Refactoring, Code Cleanup;
Escala mais freqüente : Aplicação;

Você alguma vez se enquadrou em um dos anti-padrões aqui citados ? (seja sincero...)

Eu sei é apenas anti-padrões mas eu gosto...

Jesus disse-lhes: A minha comida é fazer a vontade daquele que em enviou, e realizar a sua obra. (João 4:34)

Referências:


José Carlos Macoratti