2009-05-11 7 views
8

No estoy seguro de por qué la adopción de AO ha sido tan lenta. Hay muchas implementaciones ricas para los idiomas predominantes. Mi suposición es que, como OO en su día, es suficiente cambio de paradigma como para que la gente no reconozca los lugares donde podría ayudarlos.¿Cuáles son sus usos reales para la Programación Orientada a Aspectos?

Por lo tanto, más allá del registro no invasivo, ¿cuáles son algunas de las formas en que ha utilizado, o planea utilizar AO, que reduce la complejidad, mejora el mantenimiento y mejora el sistema "ilities"?

Respuesta

2

Gestión de transacciones. Sé que es un uso canónico de AOP, pero realmente brilla cuando se usa para eso.

Y si bien no he tenido la oportunidad de usarlo en una situación real, veo que "around-advice" es INCREÍBLEMENTE poderoso, en particular por el valor que agrega para simplificar la complejidad del código eliminando la necesidad de muchos controles para condiciones raras.

0

En mi experiencia, con Spring AOP parece ser bastante común.

Creo que la dificultad es que las personas simplemente no están acostumbradas a pensar en términos de aspectos, y tejer código incluso en tiempo de compilación puede atemorizar, ya que es más difícil ver lo que realmente afecta a cada método, por ejemplo, esp si usa una mezcla de tejido en tiempo de compilación y tiempo de ejecución.

Lo he usado en situaciones donde tengo un controlador, y añado si es un servlet o un servicio web, por ejemplo. También lo utilicé para abstraer la base de datos, por lo que las conexiones de la base de datos y las consultas optimizadas para la base de datos podrían integrarse en la aplicación.

1

Estoy de acuerdo para Spring AOP.

AOSD (ya no hablamos de AOP, no sé exactamente por qué) es realmente útil para la arquitectura orientada al middleware/servicio donde ya tiene, por diseño, cierta modularidad.

Lo he usado en este contexto para servicios de telefonía con un servicio de facturación realmente limitado.

También lo he usado para construir un tipo de intérprete/compilador modular para realizar algunos análisis alrededor de algún código.

En mi opinión, un problema son los lenguajes de corte puntual que a veces pueden ser difíciles para describir exactamente dónde desea aplicar su consejo. Otro problema es la composición, no sé si se ha resuelto, pero podría ser difícil de entender cuando pida sus consejos ...

1

AOP es común, excepto que rara vez la gente lo llama AOP. Mire todos los lugares en la programación de .NET donde se usan los atributos. Los atributos son esencialmente comportamientos transversales que pueden aplicarse en muchas clases/métodos/parámetros.

Más recientemente, la plataforma ASP.NET MVC ha adoptado el uso intensivo de atributos para una amplia gama de componentes transversales, como seguridad, enlace de datos y manejo de excepciones.

+0

Entonces, ¿cuál sería un ejemplo del mundo real de los atributos que ilustran eso? –

+0

P. ej. en ASP.NET MVC, puede etiquetar una clase o método de controlador con el atributo [Autorizar], y la infraestructura garantizará que al invocar el controlador se active la autorización (por ejemplo, redirigir a la página de inicio de sesión). Hay muchos otros ... – DSO

3

Actualmente estoy usando AOP a través EntLib/Unidad en la producción para:

  • tala
  • almacenamiento en caché
  • seguridad
  • informes de excepción
  • contadores de rendimiento

Tome una mira http://www.agileatwork.com/unit-of-work-with-unity-and-aspnet-mvc/ para un diablillo lementation de la unidad de patrón de trabajo con AOP

[UnitOfWork] 
public void Process(Job job) 
{ 
    ... 
} 
+0

Para ayudar a convertir un objeto en un sujeto para usarlo en un patrón de observador. Al agregar una llamada para notificar al final de todos los métodos de los mutadores. –

Cuestiones relacionadas