Bem…
A programação orientada a aspectos (POA) é uma extensão da programação orientada a objetos (POO). A programação orientada a aspectos surgiu com o intuito de suprir as necessidades de se modularizar os sistemas que apresentam interesses transversais (crosscutting concerns), tais como logging, segurança, tratamento de exceções, etc. Esta melhoria na modularização dos interesses da aplicação é possível pelo fato de existir novos mecanismos de abstração e composição que facilitam a modularização destes interesses transversais, tais como: aspectos, conjuntos de junção (pointcuts), declarações inter-tipos e adendos (advices).
Embora o uso de aspectos possa auxiliar na modularização de interesses transversais, seu uso pode ocasionar alguns problemas específicos, Alguns exemplos de uso de aspectos que não são aconselháveis são: muitos advices que se referenciam a um mesmo pointcut, pointcuts duplicados, muitas definições de pointcuts anônimos, pointcut de um aspecto ser usados por outro aspecto, etc.
Estes problemas normalmente dificultam o entendimento e o reuso em todas as fases de um processo de desenvolvimento, além de aumentar o custo do desenvolvimento e da evolução do software. Pode-se minimizar esses problemas através da identificação de seus sintomas e da remoção das causas destes problemas. Também chamados como bad smells, os sintomas identificados no sistema podem ser vistos como sinais de alerta para os problemas existentes, e, preferencialmente, devem ser corrigidos através da aplicação de refatorações definidas para cada bad smell.
Os bad smells em orientação a aspectos pode ser considerada como defeitos específicos em um projeto deste paradigma está relacionada com defeitos específicos de projeto deste paradigma, talvez estes sejam de acordo com as novas noções e as maneiras diferentes de pensar em desenvolver o software.
Em um sistema orientado a aspectos, além de ter bad smells do próprio paradigma, também contêm bad smells da linguagem nativa. Como por exemplo, um projeto escrito em AspectJ [Kiczales et al., 1997], uma extensão da linguagem de programação Java, que pode conter tanto bad smells de orientação a aspectos como de Java (Orientação a Objetos).
Logo, esses bad smells como disse, são técnicas que devemos evitar, e já existem vários padrões documentados sobre essas técnicas e a solução de cada.
:roll: