2011-01-27 7 views
21

La programación orientada a aspectos es una materia en la que me ha sido muy difícil encontrar buena información. Mi antiguo libro de texto de Ingeniería de Software solo lo menciona brevemente (y vagamente), y la wikipedia y varios otros tutoriales/artículos que he podido encontrar en él brindan definiciones ultra académicas y altamente abstractas de lo que es, cómo usarlo. y cuándo usarlo. Definiciones Simplemente no parezco entender.Fundamentos de AOP

Mi (muy pobre) comprensión de AOP es que hay muchos aspectos de la producción de un sistema de software de alta calidad que no encaja perfectamente en un pequeño paquete cohesivo. Algunas clases, como Loggers, Validators, DatabaseQueries, etc., se usarán en toda la base de código y, por lo tanto, estarán altamente acopladas. Mi (una vez más, muy poor) comprensión de AOP es que está preocupado con las mejores prácticas de cómo manejar estos tipos de paquetes "universalmente acoplados".

Pregunta: ¿Es esto cierto o estoy totalmente equivocado? Si estoy completamente equivocado, ¿alguien puede dar una explicación concisa y profana de lo que es un AOP, un ejemplo de lo que se llama aspecto, y tal vez incluso proporcionar un ejemplo de código simple?

+4

buen cuestión también muy bien en tela de juicio. –

Respuesta

12

La separación de preocupaciones es un principio fundamental en el desarrollo de software, hay un documento clásico de David Parnas On the Criteria To Be Used in Decomposing Systems into Modules que puede presentarle el tema y también leer Uncle Bob's SOLID Principles.

Pero también existen problemas cruzados que podrían incluirse en muchos casos de uso como autenticación, autorización, validación, registro, manejo de transacciones, manejo de excepciones, almacenamiento en caché, etc. que engendran todas las capas en el software. Y si quiere abordar el problema sin duplicación y utilizar el principio DRY, debe manejarlo de una manera sofisticada.

Debe utilizar la programación declarativa, que simplemente en .net podría anotar un método o una propiedad por un atributo y lo que sucedió después es cambiar el comportamiento del código en tiempo de ejecución según esas anotaciones.

se puede encontrar un buen capítulo sobre este tema en Sommerville's Software engineering book

Enlaces útiles C2 wiki CrossCuttingConcern, MSDN, How to Address Crosscutting Concerns in Aspect Oriented Software Development

+0

Jani - gracias por la ayuda y los enlaces. Me llevará algo de tiempo "digerirlos", pero estoy seguro de que tendré más preguntas educadas después del fin de semana. Consideraré esta pregunta por ahora, porque las preguntas posteriores serán más específicas. ¡Gracias de nuevo! – Eugie

+0

Mi placer amigo, me alegraría poder ayudarte, buena suerte –

+2

bien explicativo ejemplo para entender AOP aquí en http://stackoverflow.com/questions/232884/aspect-orientted-programming-vs-object-oriented -programación/232918 # 232918 –

0

AOP se trata de cuestiones transversales, es decir, cosas que debe hacer a lo largo de toda la aplicación. Por ejemplo, logging. Supongamos que desea rastrear cuando ingresa y sale de un método. Esto es muy fácil con los aspectos. Básicamente, especifica un "controlador" para un evento, como ingresar un método. Si es necesario, también puede especificar con "comodines" qué métodos le interesan y luego solo es cuestión de escribir el código del controlador, que podría, por ejemplo, registrar alguna información.

0

programación orientada a aspectos es, básicamente, para la separación de los temas transversales (no funcional) y desarrollar como aspectos, como seguridad, registro, monitor, etc., lo dejó de lado cuando lo necesita en su aplicación, puede usarlo como plug & play. El único beneficio que podemos lograr es un código limpio, menos código y los programadores pueden enfocarse en la lógica empresarial (preocupaciones fundamentales), de modo que se pueda desarrollar una mejor modularidad y un sistema de calidad.

2

AOP es una técnica donde extraemos y eliminamos los problemas de corte transversal (registro, manejo de excepciones, ...) de nuestro código en su propio aspecto. dejando nuestro código original enfocándose solo en la lógica de negocios. Esto no solo hace que nuestro código sea más legible y mantenible, sino que también el código es SECO.

Esto se puede explicar mejor mediante un ejemplo:

Aspect Oriented Programming (AOP) in the .net world using Castle Windsor o Aspect Oriented Programming (AOP) in the .net world using Unity