La mejor manera de hacer una programación orientada a aspectos en .NET es mediante el uso de técnicas de diseño bien conocidas. Por ejemplo, al aplicar el SOLID principles puede lograr la flexibilidad y la modularidad que necesita para permitir agregar preocupaciones transversales. Si tiene el diseño correcto, incluso podrá aplicar la mayoría de las preocupaciones transversales sin ningún marco. Es una falacia pensar que OOP no es adecuado para hacer AOP.
Éstos son algunos consejos:
- no dependen de casos concretos, sino que dependen de las abstracciones.
- No mezcle las preocupaciones transversales y la lógica comercial en la misma clase.
- Agregando preocupaciones transversales envolviendo las clases con la lógica de negocio en las clases que implementan esas preocupaciones (decorators).
- Encuentra artefactos comunes en tu diseño y ejemplifícalos por igual, preferiblemente usando el mismo tipo de abstracciones. Eche un vistazo a this y this por ejemplo.
Cuando tiene las abstracciones correctas en su lugar, agregar nuevas preocupaciones transversales al sistema es solo una cuestión de escribir una nueva clase de decorador y envolverlo en las implementaciones correctas. Si las abstracciones son genéricas, puede envolver a un solo decorador en un gran grupo de clases (que es exactamente de lo que se trata AOP).
Aunque técnicas como los proxies dinámicos y el tejido de códigos podrían facilitar el trabajo con una aplicación mal diseñada, no existe realmente ninguna alternativa para un buen diseño. Tarde o temprano te quemarás. Esto no significa que la generación dinámica de proxy y el tejido de código no se deben utilizar. Pero sin un diseño de aplicación adecuado, incluso esas técnicas serán marginalmente útiles.
Sería útil si proporcionara enlaces a todo el AOP, a fin de ahorrarle al lector un poco de tiempo con Google. Espero que esta pregunta/respuestas se convierta en un gran resumen de las diferentes opciones de AOP en .NET –
52 personas votaron que es una pregunta constructiva. 5 votaron que no es constructivo. ¿Quién decidió? Al menos el moderador debería cambiar o reformular la pregunta, pero sería mejor considerar la opinión de la mayoría de la gente. – Revious
@Revious Totalmente de acuerdo! – Legends