MVC AOP -orientierte Programmierung
Ich glaube, jeder ist dem Wort AOP nicht ausgesetzt, aber tatsächlich sind Sie bereits im Designmodus dem ausgesetzt. Die von AOP verwendete Idee entspricht tatsächlich das gleiche wie das Entwurfsmuster, dh die Funktionen werden hinzugefügt oder geändert, ohne den ursprünglichen Code zu ändern. Außerdem wird AOP hauptsächlich im Frühjahr verwendet, aber was in diesem Artikel geschrieben ist, wird nur in MVC verwendet. Seien Sie also vorsichtig.
1. Einführung
Die sogenannte AOP (Abkürzung der Aspekt-orientierten Programmierung) bezeichnet eine Technologie, die eine einheitliche Wartung von Programmfunktionen durch Vorkompilierungsmethoden und dynamische Wirkstoffe während der Laufzeit implementiert. AOP ist eine Fortsetzung von OOP, ein heißes Thema in der Softwareentwicklung, ein wichtiger Bestandteil des Spring -Frameworks und ein Derivatparadigma der funktionalen Programmierung. Die verschiedenen Teile der Geschäftslogik können durch Verwendung von AOP isoliert werden, wodurch die Kopplung zwischen den verschiedenen Teilen der Geschäftslogik, die Wiederverwendbarkeit des Programms verbessert und die Effizienz der Entwicklung verbessert wird.
Das obige ist die offizielle Erklärung von Baidu Encyclopedia, aber meiner Meinung nach ist AOP eher eine Art Gedanken, eine Art Gedanken, der den ganzen Körper bewegen und verbinden kann. AOP sieht sich eher einer Programmbehörde aus, die von einer Einwilligungsfunktion oder einem Anrufprozess geschrieben wurde. Aus seinem ersten Wortaspekt, der sich auf einen Aspekt bezieht, können wir auch verstehen, dass diese Methode einen Aspekt implementieren soll. Dies ist der globalen Datei in MVC tatsächlich sehr ähnlich und auch ein wichtiger Bestandteil des Frühlingsgerüsts. Es ist ein Derivatparadigma der funktionellen Programmierung. Die verschiedenen Teile der Geschäftslogik können durch Verwendung von AOP isoliert werden, wodurch die Kopplung zwischen den verschiedenen Teilen der Geschäftslogik, die Wiederverwendbarkeit des Programms verbessert und die Effizienz der Entwicklung verbessert wird.
Zweitens kann seine Vorkompilierung einige Fehler gut bewältigen oder einige Situationen beeinträchtigen, was auch dazu führt, dass sie bei der Beurteilung von Berechtigungen und einer einheitlichen Ausgabe von etwas beim Entwerfen häufiger wird. "Eine Technologie kann durch Vorkompilationsmethoden und dynamisches Proxying während der Laufzeit erreicht werden, um Programmen dynamisch Funktionen hinzuzufügen, ohne den Quellcode zu ändern. AOP ist tatsächlich eine Fortsetzung des GOF -Designmusters. Das Entwurfsmuster verfolgt unermüdlich die Entkopplung zwischen dem Anrufer und dem Callee, der Flexibilität und der Skalabilität der Skalabilität des Codes. Der obige Satz ist auch eine gute Interpretation von AOP.
2. Implementierung in MVC
Lassen Sie uns so viel sagen. Zuerst müssen wir ein neues MVC -Projekt in vs. erstellen, MVC3 oder 4 auswählen und es ist in Ordnung, dann einen Controller erstellen, es nach Belieben nennen und dann seine Ansicht erstellen und die einfachste Helloworld in der Ansicht schreiben.
<! DocType html> <html> <kopf> <titels> Index </title> </head> <body> <div> <a> Hallo! Welt </a> </div> </body> </html>
Das Bild rechts zeigt die von mir erstellte MVC -Lösung, den hinzugefügten Controller und die Ansicht. Schreiben Sie den obigen Code in der Ansicht, um Hallo anzuzeigen! Welt.
Erscheint das Wort HelloWorld nach dem Ausführen (es funktioniert nicht) auf der Webseite?
OK, als nächstes erstellen wir eine neue AOP -Datei und verwenden sie dann. Fügen Sie zuerst eine neue Klasse zu diesem Projekt hinzu, das als Filterpublic bezeichnet wird, die Referenz mit System.web.mvc in der Referenz und dann diese Klasse von ActionFilterAttribute erben. Jeder sollte auf das Wort Aktion achten, was bedeutet, dass dieses Ding auf Aktionen basiert.
Dann schreiben wir den folgenden Code:
public string meldung {get; Satz; } public override void onactionExecuting (actionExecutingContext filterContext) {Base.onactionExecuting (filterContext); filterContext.httpcontext.Response.write ("Vor der Aktion Ausführung" + Message + "<br />"); } public override void onactionExecuted (actionExecutedContext filterContext) {Base.onActionExecuted (filterContext); filterContext.httpcontext.Response.write ("Nach der Ausführung der Aktion" + Message + "<br />"); } public override void onResultExecuting (resultExecutingContext filterContext) {Base.onResultExecuting (filterContext); filterContext.httpcontext.Response.write ("Rückgabe vor Ergebnis" + meldung + "<br />"); } public override void onResultExecuted (resultexecutedContext filterContext) {base.onResultExecuted (filterContext); filterContext.httpcontext.Response.write ("Rückgabe nach Ergebnis" + meldung + "<br />"); }Dies sind die verschiedenen durch Filter ausgelösten Aktionen, und dann stellen wir die folgenden Änderungen an der Standardmethode im Controller vor:
[<span style = "font-size: 18px;"> filterpublic < /span> (message = "action")] public actionResult index () {httpcontext.Response.write ("Aktion wird ・・ <br />"); Inhalt zurückgeben ("Ergebnis ・・ <br />"); } Fügen Sie dann einen Satz [Filterpublic (Message = "Controller)] in die Klasse des Controllers hinzu und führen Sie ihn dann aus. Was wird passieren?
Aktion vor der Ausführungsaktion wird ・・・ nach der Ausführungsaktion zurückgegeben, bevor die Ausführungsaktion das Ergebnis ・・・ nach dem Rückgabeergebnis nach der Rückgabe zurückgibt
Sie können sehen, dass wir vor der Ausführung der Methode im Controller den Code zuerst in Filterpublic ausführen werden, die wir unten festgelegt haben. Und da die Aktion in unterschiedlichen Zeiten stattfindet, können wir auch sehen, welche Methode ausgelöst wird.
Die auf dem Controller geschriebene Controller-basierte Methode löste sich jedoch nicht aus. Warum ist das?
Tatsächlich ist dieses Problem sehr einfach. Als wir unser AOP -Programm eingerichtet haben, haben wir die Parameter nicht festgelegt und nicht zugelassen, dass Filter überlagert werden. Zu diesem Zeitpunkt fügen wir nur hinzu: [Attributeusage (AttributTargets.All, degitmultiple = true)] der Filterpublic -Klasse, in die Sie geschrieben haben, und wir können verschiedene Filter oder überlagerte Filter auslösen. Lassen Sie uns zu diesem Zeitpunkt versuchen, zu rennen:
Controller bevor die Aktion ausgeführt wird. Aktion wird ausgeführt. Aktion wird ausgeführt. Nach der Aktion wird ausgeführt. Aktion wird ausgeführt. Nach der Aktion wird ausgeführt. Controller kehrt vor Ergebnis zurück. Controller kehrt vor Ergebnis zurück. Die Aktion kehrt nach Ergebnis zurück. Die Aktion kehrt nach Ergebnis zurück. Controller kehrt nach Ergebnis zurück.
Auf diese Weise wird auch der Filter auf dem Controller ausgelöst. Wenn wir also die AOP -Methode verwenden, müssen wir nur ein Filterklassen -Tag für unsere eigene schriftliche Methode oder die Standardlademethode der Seite schreiben.
Wenn wir also eine Funktion haben, bei der alle Seiten ausgelöst werden müssen, wäre es nicht problematisch? Mach dir keine Sorgen, wir sind zu dieser Zeit an der Arbeit. Registrieren Sie einfach den Filter, den Sie unter der RegisterGlobalFilters -Methode unter der Datei Global.asax geschrieben haben:
public static void RegisterGlobalFilters (GlobalFilterCollection Filter) {filters.add (neuer HandleErRorATTRIBUTE ()); // Definieren Sie Ihren eigenen Filter als global filter.add (neu <span style = "font-size: 18px;"> filterpublic </span> () {message = "global <br/>"}); }Rennen Sie dann die Ergebnisse und sehen Sie die Ergebnisse:
Aktion vor der Ausführung globaler Aktion vor der Ausführungscontroller -Aktion vor der Ausführung Aktion vor der Ausführungsaktion wird nach der Aktion nach der Ausführungsaktion nach Ausführungscontroller -Aktion nach der globalen Rückgabeergebnis der Ausführung vor dem globalen Rückgabeergebnis vor dem Rückgabeergebnis des Controllers vor der Rückgabe des Ergebnissergebnisse
Auf diese Weise erfolgt die globale Auslöser (die Nachricht im Filter wird nur zur Identifizierung der Hierarchie verwendet und kann nicht definiert werden, wenn sie formell verwendet wird.)
Aus dieser Perspektive müssen Sie nur einen neuen Filter erstellen und dann die globale Datei ändern, wenn Sie schnell eine globale Methode hinzufügen möchten. Ist es nicht sehr bequem?
Die oben genannten sind einige meiner kurzen Forschungen zu AOP. Wenn es Fehler gibt, korrigieren Sie mich bitte.
Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!