|
|
Veröffentlicht am 18.04.2017 14:54:11
|
|
|

Fangen wir mit einem einfachen Codesatz an:
Angenommen, es handelt sich um ein Webprogramm: Wir wollen zuerst die Sitzung überprüfen, dann die Berechtigungen prüfen, eine Transaktion starten, ein Log schreiben, dann die Operation selbst ausführen und schließlich ein Protokoll schreiben. Offensichtlich können wir nicht alle Methodenaufrufe zu den oben genannten Operationen in DoSomething() schreiben, daher wird der Code zu einem großen Miststück – was sollen wir also tun?
Es gibt viele Möglichkeiten, es zu implementieren, zum Beispiel durch Frameworks wie Spring, aber in tatsächlichen Projekten ist es nicht möglich, ein Framework locker einzuführen, und oft müssen wir einige Mechanismen selbst schreiben.
Hier denke ich an den Filter in MVC: Solange du einen Attribut-Tag auf den Controller oder die Aktion setzt, kannst du vor und nach der Ausführung der Methode noch andere Dinge tun. Simulieren wir also einfach eine Filterimplementierung.
Zunächst wird die ursprüngliche Methode in eine elegante Art von Merkmalsbezeichnungen umgewandelt:
Bei Feature-Tags muss es Klassen geben, die Feature-Tags entsprechen, sowie AOP-Implementierungen, die unabhängig in einer Datei oder Assembler enthalten sein können.
Zuerst das an die Methode angehängte Label, implementiert als leer:
//贴在方法上的标签 [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] öffentliche versiegelte Klasse MyInterceptorMethodAttribute : Attribute { } Danach definieren Sie das Label, das an die Klasse angehängt werden soll:
Hier ist eine MyAopHandler-Klasse definiert, implementiert wie folgt:
Beachten Sie, dass der spezifische Operationsteil des oben genannten Codes einer "Proxy-Klasse" entspricht, die im Wesentlichen den Kontext der Methodenausführung verändert. Objektorientierte Programmstrukturen wie Delegierte können genutzt werden, um die spezifische Implementierung der Außenwelt zur sekundären Entwicklung zugänglich zu machen. |
Vorhergehend:ES5, ES6, ES2016, ES. Als Nächstes: Was ist mit der Version von Javascrip{filter}t los?Nächster:PowerShell Einstiegsanleitung – Version v0.3
|