Entiendo la programación orientada a objetos, y he estado escribiendo programas OO durante mucho tiempo. La gente parece hablar sobre programación orientada a aspectos, pero nunca he aprendido realmente qué es o cómo usarla. ¿Cuál es el paradigma básico?
Esta pregunta está relacionada, pero no la hace:
Programación Orientada a Aspectos vs. Programación Orientada a Objetos
Respuestas:
AOP aborda el problema de las preocupaciones transversales , que sería cualquier tipo de código que se repite en diferentes métodos y que normalmente no se puede refactorizar por completo en su propio módulo, como con el registro o la verificación. Entonces, con AOP puede dejar esas cosas fuera del código principal y definirlo verticalmente de esta manera:
Y luego se usa un tejedor de aspectos para compilar el código en esto:
fuente
Desafortunadamente, parece ser sorprendentemente difícil hacer que AOP sea realmente útil en una organización normal de tamaño medio-grande. (Soporte del editor, sentido de control, el hecho de que comienzas con las cosas no tan importantes que conducen a la descomposición del código, las personas que van a casa con sus familias, etc.)
Puse mis esperanzas en la programación orientada a compuestos , que es algo cada vez más realista. Se conecta a muchas ideas populares y te da algo realmente genial.
Mire una implementación prometedora aquí: qi4j.org/
PD. En realidad, creo que una de las bellezas con AOP es también su talón de Aquiles: no es intrusivo, lo que permite que las personas lo ignoren si pueden, por lo que será tratado como una preocupación secundaria en la mayoría de las organizaciones.
fuente
Copiado de un duplicado para completar (Einstein):
Los ejemplos clásicos son la seguridad y el registro. En lugar de escribir código dentro de su aplicación para registrar la ocurrencia de x o verificar el objeto z para el control de acceso de seguridad, existe un artilugio de lenguaje "fuera de banda" del código normal que puede inyectar sistemáticamente seguridad o iniciar sesión en rutinas que no los tienen de tal manera que, aunque su código no lo proporcione, se encargará.
Un ejemplo más concreto es el sistema operativo que proporciona controles de acceso a un archivo. Un programa de software no necesita verificar las restricciones de acceso porque el sistema subyacente sí lo hace.
Si cree que necesita AOP en mi experiencia, realmente necesita invertir más tiempo y esfuerzo en la gestión adecuada de metadatos dentro de su sistema con un enfoque en el diseño estructural / de sistemas bien pensado.
fuente
Copiado de Spring in Action
fuente
Copiado de un duplicado para completar (Buzzer):
Los atributos de clase y método en .NET son una forma de programación orientada a aspectos. Decoras tus clases / métodos con atributos. Detrás de escena, esto agrega código a su clase / método que realiza las funciones particulares del atributo. Por ejemplo, marcar una clase serializable permite que se serialice automáticamente para almacenamiento o transmisión a otro sistema. Otros atributos pueden marcar ciertas propiedades como no serializables y se omitirán automáticamente del objeto serializado. La serialización es un aspecto, implementado por otro código en el sistema, y aplicado a su clase mediante la aplicación de un atributo de "configuración" (decoración).
fuente
AOP se puede utilizar para realizar acciones que no están relacionadas con la lógica empresarial de su aplicación, como el registro, el almacenamiento en caché, etc. Estas acciones se pueden colocar en una parte separada de su aplicación y luego reutilizarse en toda la aplicación. Por lo general, hay dos formas de lograr esto. Inyectando código automáticamente por un preprocesador antes / después de un método, o adjuntando clases proxy que interceptan una llamada al método y luego pueden ejecutar cosas antes / después de una llamada al método.
Aquí hay un ejemplo en .Net. Utiliza clases proxy para interceptar llamadas a métodos y ejecutar código antes o después de llamadas a métodos saif.
Programación Orientada a Aspectos (AOP) en .NET Core y C # usando AutoFac y DynamicProxy
fuente
Hay un ejemplo de AOP, se utilizó Spring AOP como ejemplo. El ejemplo es bastante fácil de entender.
El marco Spring AOP (Programación orientada a aspectos) se utiliza para modularizar las preocupaciones transversales en aspectos. En pocas palabras, es solo un interceptor para interceptar algunos procesos, por ejemplo, cuando se ejecuta un método, Spring AOP puede secuestrar el método de ejecución y agregar funcionalidad adicional antes o después de la ejecución del método.
Referencia: http://www.mkyong.com/spring/spring-aop-examples-advice/
fuente
AOP es una forma de modularizar mejor su aplicación para una funcionalidad que se extiende a través de múltiples límites. AOP es otra forma de encapsular estas características y seguir la Responsabilidad Única al mover estas preocupaciones transversales (registro, manejo de errores, etc.) fuera de los componentes principales de su aplicación. Cuando se usa apropiadamente, AOP puede conducir a niveles más altos de mantenibilidad y extensibilidad en su aplicación con el tiempo.
fuente