significado - aop spring example
Fundamentos de AOP (4)
La programación orientada a los aspectos es un tema en el que me ha resultado 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 proporcionan definiciones ultra académicas y altamente abstractas de lo que es, cómo usarlo. y cuándo usarlo. Definiciones que simplemente no entiendo.
Mi (muy mala) 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 paquete pequeño y agradable. Algunas clases, como Loggers, Validators, DatabaseQueries, etc., se utilizarán en todo el código base y, por lo tanto, serán altamente acopladas. Mi (una vez más, muy escasa) comprensión de AOP es que se refiere a las mejores prácticas de cómo manejar estos tipos de paquetes "universalmente acoplados".
Pregunta: ¿Es esto cierto, o estoy totalmente fuera? Si estoy completamente equivocado, ¿puede alguien dar una explicación concisa y laymen de lo que es AOP, un ejemplo del llamado aspecto , y tal vez incluso proporcionar un ejemplo de código simple?
AOP es una técnica en la que extraemos y eliminamos las preocupaciones transversales (registro, manejo de excepciones, ...) de nuestro código en su propio aspecto. dejando nuestro código original enfocado solo en la lógica de negocios. No solo esto hace que nuestro código sea más legible y mantenible, sino que también el código es SECO.
Esto puede explicarse mejor con un ejemplo:
Programación Orientada a Aspectos (AOP) en el mundo .net usando Castle Windsor o Programación Orientada a Aspectos (AOP) en el mundo .net usando Unity
AOP se trata de cuestiones transversales, es decir, cosas que debe hacer en toda la aplicación. Por ejemplo, el registro. Supongamos que desea rastrear cuando ingresa y sale de un método. Esto es muy fácil con los aspectos. Básicamente, usted especifica un "controlador" para un evento, tal como ingresar un método. Si es necesario, también puede especificar con "comodines" los métodos que le interesan y luego solo tiene que escribir el código del controlador, que podría, por ejemplo, registrar cierta información.
La programación orientada a aspectos es básicamente para separar las preocupaciones transversales (no funcionales) y desarrollarlas como aspectos como seguridad, registro, monitor, etc., manteniéndola a un lado cada vez que la necesite en su aplicación, puede usarla como conector jugar. El único beneficio que podemos lograr es un código limpio, menos código y los programadores pueden centrarse en la lógica de negocios (preocupaciones centrales), de modo que se pueda desarrollar un mejor sistema de modularidad y calidad.
La separación de inquietudes es un principio fundamental en el desarrollo de software; hay un artículo clásico de David Parnas sobre los criterios que se deben usar en los sistemas de descomposición en módulos que pueden presentarle el tema y también leer los Principios SOLID del tío Bob .
Pero luego hay preocupaciones transversales que pueden 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 generan todas las capas en el software. Y si desea abordar el problema sin duplicación y empleando el principio DRY, debe manejarlo de una manera sofisticada.
Debe usar programación declarativa, que simplemente en .net podría estar anotando un método o una propiedad por un atributo y lo que sucedió más tarde es cambiar el comportamiento del código en tiempo de ejecución dependiendo de esas anotaciones.
Puede encontrar un buen capítulo sobre este tema en el libro de ingeniería de software de Sommerville.
Enlaces útiles C2 wiki CrossCuttingConcern , MSDN , Cómo abordar inquietudes transversales en el desarrollo de software orientado a aspectos