A melhor maneira de fazer programação orientada a aspectos no .NET é usando técnicas de design bem conhecidas. Por exemplo, ao aplicar os princípios SOLID, você pode obter a flexibilidade e modularidade de que precisa para permitir a adição de interesses transversais. Se você tiver o design correto, poderá até mesmo aplicar a maioria das questões transversais sem qualquer estrutura. É uma falácia pensar que OOP não é adequado para fazer AOP.
Aqui estão algumas dicas:
- Não dependa de instâncias concretas, mas dependa de abstrações.
- Não misture interesses transversais e lógica de negócios na mesma classe.
- Adicionar interesses transversais envolvendo classes com lógica de negócios em classes que implementam esses interesses ( decoradores ).
- Encontre artefatos comuns em seu design e modele-os igualmente, de preferência usando o mesmo tipo de abstrações. Dê uma olhada nisso e nisso, por exemplo.
Quando você tiver as abstrações certas no lugar, adicionar novas preocupações transversais ao sistema é apenas uma questão de escrever uma nova classe de decorador e envolvê-la nas implementações certas. Se as abstrações forem genéricas, você pode envolver um único decorador em torno de um grande grupo de classes (que é exatamente do que trata o AOP).
Embora técnicas como proxies dinâmicos e entrelaçamento de código possam facilitar o trabalho com um aplicativo mal projetado, realmente não há alternativa para um bom design. Mais cedo ou mais tarde você vai se queimar. Isso não significa que a geração dinâmica de proxy e a combinação de código não devam ser usadas. Mas sem um design de aplicativo adequado, mesmo essas técnicas serão apenas marginalmente úteis.