|
|
Publicado en 18/4/2017 14:54:11
|
|
|

Empecemos con un sencillo fragmento de código:
Digamos que es un programa web, queremos comprobar primero la sesión, luego los permisos, iniciar una transacción, escribir un registro, luego ejecutar la operación y finalmente escribir un registro. Obviamente, no podemos escribir todas las llamadas a métodos para las operaciones anteriores en DoSomething(), así que el código se convertirá en un gran desastre, ¿qué deberíamos hacer?
Hay muchas formas de implementarlo, como usar frameworks como Spring, pero en proyectos reales no es posible introducir un framework de forma casual, y muchas veces necesitamos escribir algunos mecanismos por nuestra cuenta.
Aquí pienso en el Filtro en MVC, mientras pongas una etiqueta de atributo en el Controlador o la Acción, puedes hacer otras cosas antes y después de ejecutar el método. Así que simplemente simulemos una implementación de filtro.
En primer lugar, el método original se transforma en una forma elegante de etiquetas de características:
Con las etiquetas de características, debe haber clases correspondientes a etiquetas de características, así como implementaciones de AOP, que pueden contenerse de forma independiente en un archivo o ensamblador.
Primero, la etiqueta adjunta al método, implementada como vacía:
//贴在方法上的标签 [UsoAtributo(ObjetivosAtributos.Método, PermiteMúltiple = false)] clase pública sellada MyInterceptorMethodAttribute : Attribute { } Después de eso, define la etiqueta que se va a asociar a la clase:
Aquí tienes una clase MyAopHandler definida, implementada de la siguiente manera:
Ten en cuenta que la parte específica de operación del código anterior es equivalente a una "clase proxy", que esencialmente cambia el contexto de la ejecución del método. Las estructuras de programas orientadas a objetos, como los delegados, pueden utilizarse para exponer la implementación específica al mundo exterior para desarrollo secundario. |
Anterior:ES5, ES6, ES2016, ES. Siguiente: ¿Qué está pasando con la versión de Javascrip{filter}t?Próximo:Tutorial de PowerShell para empezar - versión v0.3
|