comecei a conhecer AOP graças a revista Mundo Java com seu artigo sobre AOP usando o AspectJ.
Pelo que eu entendi de AOP, ele serve basicamente para solucionar problemas em que usando apenas OOP seria dificil de resolver ou até mesmo impossível, certo? Sua lógica seria mudar aspectos de funcionalidades já feitas, não precisando mudar códigos e futuras incompatibilidade, estou no caminho certo?
Se eu estiver no caminho certo, a dúvida é: quando irei saber se vou ou não usar AOP? Seria no meio do projeto quando algo já está pronto? ou eu tenho possibilidade de modelar isso na fase de designer?
Gostaria da opinião dos mais experts no assunto e de preferencia com exemplos reais no uso de um sistema… (tem sempre os exemplos padrões de LOG e Exceptions).
Obrigado e espero que seja útil para muitas pessoas
Usar ou não AOP é uma decisão que pode ser tomada e qualquer fase do projeto. Por exemplo depois de terminado o projeto você pode usar AOP para coletar métricas e ajudar na documentação do depto de marketing.
Mas é claro que seria melhor já decidir por AOP nos estágios iniciais porque sendo assim se poderia evitar escrever código onde AOP pudesse ajudar.
AOP é bom, ajudar a separar o que é realmente negócio do que existe apenas para administrar o umbigo do sistema. Mas AOP não resolve tudo e as vezes mesmo sendo indicado o uso de AOP, ele pode ser deixado de lado por questões de performance. Isto é fácil de explicar quando você considerar que AOP é uma solução única para um tipo de problema em todo ou em uma parte do sistema. As vezes é necessário uma sintonia fina e usar uma solução mais específica para um determinado trecho de código.
Via de regra AOP pode ter uso quando a implementação de característica, ou aspecto, do sistema ficou espaguetosa, que diminuiu a coesão das tuas classes.
Alem disso AOP é uma forma muito mais prática de implementar o pattern de decorator sem ter q chuxar interfaces e factories no teu código.