Programación orientada orientada a MVC AOP
Creo que todos no han estado expuestos a la palabra AOP, pero de hecho ya ha estado expuesto a ella, solo en el modo de diseño. La idea utilizada por AOP es en realidad la misma que el patrón de diseño, es decir, las funciones se agregan o modifican sin modificar el código original. Además, AOP se usa principalmente en la primavera, pero lo que se escribe en este artículo solo se usa en MVC, así que tenga cuidado.
1. Introducción
El llamado AOP (abreviación de la programación orientada a los aspectos) significa una tecnología que implementa el mantenimiento unificado de las funciones del programa a través de métodos de precompilación y agentes dinámicos durante el tiempo de ejecución. AOP es una continuación de OOP, un tema candente en el desarrollo de software, una parte importante del marco de Spring y un paradigma derivado de la programación funcional. Las diversas partes de la lógica comercial se pueden aislar mediante el uso de AOP, reduciendo así el acoplamiento entre las diversas partes de la lógica comercial, mejorando la reutilización del programa y mejorando la eficiencia del desarrollo.
Lo anterior es la explicación oficial de la Enciclopedia de Baidu, pero en mi opinión, AOP es en realidad más un tipo de pensamiento, un tipo de pensamiento que puede mover y conectar todo el cuerpo. AOP en realidad enfrenta más de un cuerpo de programa escrito por una función de consentimiento o un proceso de llamadas. Desde su aspecto de la primera palabra, que se refiere a un aspecto, también podemos entender que este método es implementar un aspecto. En realidad, esto es muy similar al archivo global en MVC, y también es una parte importante del marco de primavera. Es un paradigma derivado de la programación funcional. Las diversas partes de la lógica comercial se pueden aislar mediante el uso de AOP, reduciendo así el acoplamiento entre las diversas partes de la lógica comercial, mejorando la reutilización del programa y mejorando la eficiencia del desarrollo.
En segundo lugar, su naturaleza de precompilación puede manejar bien algunos errores o perjudicar algunas situaciones, lo que también hace que se vuelva más común en juzgar los permisos y la producción unificada de algo al diseñar. "Se puede lograr una tecnología a través de métodos de precompilación y el proxy dinámico durante el tiempo de ejecución para agregar dinámicamente funciones a los programas sin modificar el código fuente. AOP es en realidad una continuación del patrón de diseño de GoF. El patrón de diseño se está desacoplando incansablemente entre la persona que llama y la calma, mejorando la flexibilidad y la escalabilidad del código. La oración anterior también es una buena interpretación de AOP.
2. Implementación en MVC
Habiendo dicho tanto, echemos un vistazo. Primero, necesitamos crear un nuevo proyecto MVC en Vs., seleccionar MVC3 o 4 y está bien, luego crear un controlador, nombrarlo a voluntad y luego crear su vista y escribir el HelloWorld más simple en la vista.
<! DOCTYPE HTML> <html> <fead> <title> índice </title> </head> <body> <div> <a> ¡Hola! Mundo </a> </div> </body> </html>
La imagen de la derecha muestra la solución MVC que creé, el controlador agregado y la vista. ¡Escriba el código anterior en la vista para mostrar hola! Mundo.
Después de ejecutar (no funciona), ¿aparece la palabra helloworld en la página web?
Ok, a continuación, comenzamos a crear un nuevo archivo AOP y luego lo usamos. Primero, agregue una nueva clase a este proyecto, llamado FilterPublic, agregue la referencia usando System.Web.MVC en la referencia, y luego deje que esta clase herede de ActionFilterAttribute. Todos deben prestar atención a la palabra acción, lo que significa que esto se basa en la acción.
Luego escribimos el siguiente código:
mensaje de cadena pública {get; colocar; } public anulación void onactionExecuting (ActionExeCutingContext FilterContext) {base.OnActionExecuting (filtreContext); filterContext.httpContext.Response.Write ("Antes de la ejecución de la acción" + mensaje + "<Br />"); } public anulación void onactionExecuted (ActionExecutedContext FilterContext) {base.onActionExecuted (filtreContext); filterContext.httpContext.Response.Write ("Después de la ejecución de la acción" + Mensaje + "<Br />"); } public anulación void onResultExecuting (resultexecutingContext FilterContext) {base.onResultExeCuting (filtreContext); filterContext.httpContext.Response.Write ("return antes del resultado" + mensaje + "<Br />"); } public anulación void onResultExeCuted (resultexecutedContext filtreContext) {base.onResultExeCuted (filtreContext); filterContext.httpContext.Response.Write ("return después del resultado" + mensaje + "<Br />"); }Estas son las diversas acciones activadas por el filtro, y luego realizamos las siguientes modificaciones al método predeterminado en el controlador:
[<span style = "font-size: 18px;"> filterpublic </span> (mensaje = "acción")] public ActionResult index () {httpContext.Response.write ("Action está ejecutando ・・ <Br />"); return content ("resultado ・・ <Br />"); } Luego agregue una oración [filtrePublic (mensaje = "controlador")] en la clase de clase del controlador y luego ejecutarla. ¿Qué pasará?
Acción antes de que la acción de ejecución esté ejecutando ・・・ Después de que la acción de ejecución devuelve el resultado antes de que la acción de ejecución regrese el resultado ・・・ después del resultado de retorno después de la devolución
Puede ver que antes de ejecutar el método en el controlador, primero ejecutaremos el código en FilterPublic que establecemos a continuación. Y a medida que la acción tiene lugar en diferentes momentos, también podemos ver qué método se activa.
Sin embargo, el método basado en el controlador escrito en el controlador no se activó. ¿Por qué es esto?
De hecho, este problema es muy simple. Cuando configuramos nuestro programa AOP, no establecimos los parámetros y no permitimos que los filtros se superpusieran. En este momento, solo agregamos: [AttributeUsage (AttributeTargets.alL, permitirseMultiple = True)] a la clase FilterPublic a la que ha escrito, y podemos activar varios filtros o filtros superpuestos. En este momento, intentemos correr:
Controlador antes de que se ejecute la acción. Se ejecuta la acción. Se ejecuta la acción. Después de la acción se ejecuta. Se ejecuta la acción. Después de la acción se ejecuta. El controlador devuelve antes del resultado. El controlador devuelve antes del resultado. La acción regresa después del resultado. La acción regresa después del resultado. El controlador devuelve después del resultado.
De esta manera, el filtro en el controlador también se activa, por lo que cuando usamos el método AOP, solo necesitamos escribir una etiqueta de clase de filtro en nuestro propio método escrito o el método de carga predeterminado de la página.
Entonces, si tenemos una función que requiere que se activen todas las páginas, ¿no sería problemático? No te preocupes, es nuestro turno de trabajar en este momento. Simplemente registre el filtro que escribió en el método RegisterGlobalFilters en el archivo global.asax:
Public static void RegisterGlobalFilters (GlobalFilterCollection Filters) {Filters.Add (new HandleErrorAttribute ()); // Defina su propio filtro como Global Filters.Add (nuevo <span style = "font-size: 18px;"> filterPublic </span> () {message = "global <br/>"}); }Luego ejecute y vea los resultados:
Acción antes de la ejecución Acción global antes de la acción del controlador de ejecución antes de la acción de ejecución antes de que se ejecute la acción de ejecución ・・・ Después de la acción después de la acción de ejecución después de la acción del controlador de ejecución después del resultado de retorno global de ejecución antes del resultado de retorno global antes del resultado de retorno del controlador antes del resultado del resultado después del resultado de retorno después del retorno de retorno
De esta manera, se realiza la activación global (el mensaje en el filtro solo se usa para identificar la jerarquía, y no se puede definir cuando se usa formalmente).
Desde esta perspectiva, si desea agregar rápidamente un método global, solo necesita crear un nuevo filtro y luego cambiar el archivo global. ¿No es muy conveniente?
Los anteriores son algunas de mis breves investigaciones sobre AOP. Si hay algún error, corríjeme.
Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!