2008-12-20 8 views
8

Estoy muy interesado en Aspect Orientated Programming (Spring, PostSharp, etc.). Puedo pensar en un par de formas en que emplearía esto, principalmente la tala o la carga lenta me viene a la mente. Esperaba ver para qué lo usaban todos los demás?¿Utiliza AOP? ¿y para qué?

favor enumerar los senarios a resolver utilizando AOP. (Hopfully puede inspirar a alguien más a recogerlo también)

aplausos

huesos

+0

Dupe of http://stackoverflow.com/questions/325558/aspect-oriented-programming-examples –

+0

genial gracias por el enlace ... no lo vi antes :) – dbones

+0

Es posible que desee echar un vistazo a [esta pregunta] (http://stackoverflow.com/questions/325558/aspect-oriented-programming-examples) ... –

Respuesta

1

atributos en C# pueden ser ejemplos de AOP - por ejemplo, el AuthorizeAttribute en ASP.NET MVC se aplica la autorización requisitos a través de métodos o clases decorados con el atributo.

2

que utilizan AOP para un proyecto de gran envergadura en la temporada 2007/2008. La compañía para la que trabajaba me hizo desarrollar un CMS personalizado para administrar a sus clientes. Se integró en el marco personalizado que desarrollamos y podría representar de forma condicional el contenido en función de los metadatos del usuario a través de nuestro motor de reglas.

Nuestros entornos se dividieron en el tradicional Dev/QA/Staging/Production. Necesitábamos una forma de migrar entidades, ya sea contenido u otros datos, entre los entornos. Utilicé AOP para rastrear los cambios a los valores de las propiedades, esencialmente registrando y versionando todos los cambios a las entidades creadas en los entornos de nivel inferior. Al utilizar la reflexión, las entidades se copiaron "reproduciendo" en un entorno objetivo los cambios realizados en un entorno fuente. Llamé al sistema ChangeFlow porque estaba integrado en un sistema de flujo de trabajo. Los aprobadores de contenido podrían aprobar una versión actual, lo que iniciaría la migración. Cualquier objeto podría ser "ChangeFlow habilitado" al derivar de una clase base común y agregar algunos atributos a los métodos y propiedades que necesitan seguimiento.

1
  • Seguridad - declarar permisos/roles necesarios y aplicar algunos consejos que tiene conocimiento del principal actual para tomar decisiones de autorización
  • poda
  • Object - corte con tijeras de diferentes partes de un gráfico de objetos utilizando consejos
  • Transacciones - aplicar comportamiento transaccional a métodos que no tienen conocimiento de la transaccionalidad
  • código de sincronización

registro es a menudo citado como un ejemplo pero en la práctica me parece no es muy útil Las declaraciones de registro dentro de los métodos tienden a ser más valiosas.

Como se sugirió anteriormente, agregar atributos a las clases o métodos y luego usar AOP para introspectar los metadatos y realizar la lógica es una excelente manera de desacoplar esa lógica del código. También puede hacer las declaraciones en un artefacto separado (XML), pero el enfoque de atributo me parece muy poderoso.

3

Estoy de acuerdo con el mensaje por brd6644 (y habrían votado para arriba si pudiera). Especialmente su comentario sobre la tala. Usar aspectos para el registro es más parecido al rastreo.

Hay dos podcasts en se-radio.net en AOP. El first, una entrevista con Gregor Kiczales, quien ha investigado mucho sobre AOP; el second, una entrevista más reciente con Christa Schwanninger e Iris Groher se centra en cómo se usa el AOP en la práctica. Ambos merecen una escucha.

Por último, tenga cuidado en la forma en que se adopte AOP. Demasiado enfoque en AOP y se está concentrando en la plataforma en lugar de ofrecer valor comercial. Nunca me han indicado utilizar AOP en un caso de prueba.Los aspectos son algo que introduciría durante la refacturación de una aplicación para eliminar la duplicación.