MVC AOP Oriented Programming
Je crois que tout le monde n'a pas été exposé au mot AOP, mais en fait, vous y avez déjà été exposé, juste en mode conception. L'idée utilisée par AOP est en fait la même que le modèle de conception, c'est-à-dire que les fonctions sont ajoutées ou modifiées sans modifier le code d'origine. De plus, AOP est principalement utilisé au printemps, mais ce qui est écrit dans cet article n'est utilisé que dans MVC, alors soyez prudent.
1. Introduction
Le soi-disant AOP (abréviation de la programmation orientée vers l'aspect) signifie une technologie qui met en œuvre le maintien unifié des fonctions de programme par le biais de méthodes de précompilation et d'agents dynamiques pendant l'exécution. AOP est une continuation de la POO, un sujet brûlant dans le développement de logiciels, une partie importante du cadre de printemps et un paradigme dérivé de la programmation fonctionnelle. Les différentes parties de la logique commerciale peuvent être isolées en utilisant AOP, réduisant ainsi le couplage entre les différentes parties de la logique métier, améliorant la réutilisabilité du programme et améliorant l'efficacité du développement.
Ce qui précède est l'explication officielle de Baidu Encyclopedia, mais à mon avis, AOP est en fait plus une sorte de pensée, une sorte de pensée qui peut bouger et relier tout le corps. AOP fait face à davantage un corps de programme écrit par une fonction de consentement ou un processus d'appel. À partir de son premier mot, qui fait référence à un aspect, nous pouvons également comprendre que cette méthode consiste à mettre en œuvre un aspect. Ceci est en fait très similaire au fichier global de MVC, et constitue également une partie importante du framework Spring. Il s'agit d'un paradigme dérivé de la programmation fonctionnelle. Les différentes parties de la logique commerciale peuvent être isolées en utilisant AOP, réduisant ainsi le couplage entre les différentes parties de la logique métier, améliorant la réutilisabilité du programme et améliorant l'efficacité du développement.
Deuxièmement, sa nature de précompilation peut bien gérer certaines erreurs ou préjuger certaines situations, ce qui le conduit également à devenir plus courant pour juger les autorisations et la sortie unifiée de quelque chose lors de la conception. "Une technologie peut être réalisée grâce à des méthodes de précompilation et à un proxy dynamique pendant l'exécution pour ajouter dynamiquement des fonctions aux programmes sans modifier le code source. AOP est en fait une continuation du modèle de conception GoF. Le modèle de conception est sans relâche le découplage. La phrase ci-dessus est également une bonne interprétation de l'AOP.
2. Implémentation dans MVC
Cela dit, jetons un coup d'œil. Tout d'abord, nous devons créer un nouveau projet MVC dans Vs., sélectionnez MVC3 ou 4 et c'est OK, puis créez un contrôleur, nommez-le à volonté, puis créez sa vue, puis écrivez le Helloworld le plus simple sur la vue.
<! Doctype html> <html> <éad- head> <itle> index </title> </ head> <a body> <div> <a> Bonjour! Monde </a> </div> </ body> </html>
L'image à droite montre la solution MVC que j'ai créée, le contrôleur ajouté et la vue. Écrivez le code ci-dessus dans la vue pour afficher Hello! Monde.
Après l'exécution (cela ne fonctionne pas) le mot helloworld apparaît-il sur la page Web?
Ok, ensuite nous commençons à créer un nouveau fichier AOP, puis à l'utiliser. Tout d'abord, ajoutez une nouvelle classe à ce projet, appelé filterpublic, ajoutez la référence à l'aide de System.web.mvc dans la référence, puis laissez cette classe hériter de ActionFilterAttribute. Tout le monde devrait faire attention au mot Action, ce qui signifie que cette chose est basée sur l'action.
Ensuite, nous écrivons le code suivant:
Message de chaîne publique {get; ensemble; } public Override void onActionExecuting (ActionExecutingContext FilterContext) {base.OnactionExecuting (filterContext); filterContext.httpcontext.response.write ("avant l'exécution d'action" + message + "<r />"); } public Override void onActionExecuted (ActionExecutedContext filterContext) {base.onActionExecuted (filterContext); filterContext.httpcontext.response.write ("après l'exécution de l'action" + message + "<br />"); } public Override void onResultExecuting (resultexecutingContext filterContext) {base.OnResulTExecuting (filterContext); filterContext.httpcontext.response.write ("return avant le résultat" + message + "<br />"); } public Override void onResultExecuted (respectExecutedContext filterContext) {base.OnResulTExecuted (filterContext); filterContext.httpcontext.response.write ("return after result" + message + "<r />"); }Ce sont les différentes actions déclenchées par filtre, puis nous apportons les modifications suivantes à la méthode par défaut dans le contrôleur:
[<span style = "font-size: 18px;"> filterpublic </span> (message = "action")] public actionResult index () {httpcontext.response.write ("Action exécute ・・ <br />"); return contenu ("result ・・ <br />"); } Ajoutez ensuite une phrase [filterpublic (message = "contrôleur")] sur la classe de classe du contrôleur, puis exécutez-la. Que se passera-t-il?
Action avant l'exécution de l'action d'exécution ・・・ Une fois le résultat de retour d'action d'exécution avant que l'action d'exécution ne renvoie le résultat ・・・ après le résultat de retour après le retour
Vous pouvez voir qu'avant l'exécution de la méthode du contrôleur, nous allons d'abord exécuter le code dans filterpublic que nous avons défini ci-dessous. Et comme l'action se déroule à différents moments, nous pouvons également voir quelle méthode est déclenchée.
Cependant, la méthode basée sur le contrôleur écrit sur le contrôleur n'a pas déclenché. Pourquoi est-ce?
En fait, ce problème est très simple. Lorsque nous avons mis en place notre programme AOP, nous n'avons pas défini les paramètres et nous n'avons pas permis de superposer les filtres. À l'heure actuelle, nous ajoutons simplement: [AttributeUsage (attributiveTarget.all, allowMultiple = true)] à la classe FilterPublic à laquelle vous avez écrit, et nous pouvons déclencher divers filtres ou filtres superposés. Pour le moment, essayons de courir:
Contrôleur avant l'exécution de l'action. L'action est exécutée. L'action est exécutée. Une fois l'action exécutée. L'action est exécutée. Une fois l'action exécutée. Le contrôleur revient avant le résultat. Le contrôleur revient avant le résultat. L'action revient après le résultat. L'action revient après le résultat. Le contrôleur revient après le résultat.
De cette façon, le filtre sur le contrôleur est également déclenché, donc lorsque nous utilisons la méthode AOP, nous avons seulement besoin d'écrire une balise de classe de filtre sur notre propre méthode écrite ou la méthode de chargement par défaut de la page.
Donc, si nous avons une fonction qui nécessite que toutes les pages soient déclenchées, ne serait-elle pas gênante? Ne vous inquiétez pas, c'est à notre tour de travailler en ce moment. Enregistrez simplement le filtre que vous avez écrit dans le cadre de la méthode RegisterGlobalFilters dans le fichier global.asax:
Public Static Void RegisterGlobalFilters (GlobalFilterCollection Filters) {filters.add (new HandleErrorAtTribute ()); // Définissez votre propre filtre comme Global Filters.Add (nouveau <span style = "font-size: 18px;"> filterpublic </span> () {message = "global <br/>"}); }Ensuite, exécutez et voyez les résultats:
Action avant exécution Action globale avant l'exécution Action du contrôleur avant l'exécution Action avant l'exécution L'action est exécutée ・・・ Après l'action après l'action d'exécution après l'exécution Action du contrôleur après l'exécution
De cette façon, le déclenchement global est effectué (le message dans le filtre n'est utilisé que pour identifier la hiérarchie, et elle ne peut pas être définie lorsqu'elle est utilisée formellement.)
De ce point de vue, si vous souhaitez ajouter rapidement une méthode globale, il vous suffit de créer un nouveau filtre, puis de modifier le fichier global. N'est-ce pas très pratique?
Ce qui précède est quelques-unes de mes brèves recherches sur AOP. S'il y a des erreurs, veuillez me corriger.
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!