|
|
Publicerad på 2017-04-18 14:54:11
|
|
|

Låt oss börja med en enkel kodbit:
Så låt oss säga att detta är ett webbprogram, vi vill kontrollera sessionen först, sedan kontrollera behörigheterna, starta en transaktion, skriva en logg, sedan utföra själva operationen och slutligen skriva en logg. Uppenbarligen kan vi inte skriva alla metodanrop till ovanstående operationer i DoSomething(), så koden kommer att bli en stor skitstycke, så vad ska vi göra?
Det finns många sätt att implementera det, till exempel genom att använda ramverk som spring, men i faktiska projekt är det inte möjligt att introducera ett ramverk på ett avslappnat sätt, och ofta behöver vi skriva vissa mekanismer själva.
Här tänker jag på filtret i MVC, så länge du sätter en attributtagg på Controller eller Action kan du göra andra saker före och efter att metoden körs. Så låt oss helt enkelt simulera en filterimplementation.
För det första omvandlas den ursprungliga metoden till ett elegant sätt att ange funktionsetiketter:
Med funktionstaggar måste det finnas klasser som motsvarar funktionstaggar, samt AOP-implementationer, som kan innehållas oberoende i en fil eller assembler.
Först, etiketten som är kopplad till metoden, implementerad som tom:
//贴在方法上的标签 [AttributeUsage(AttributeTargets.Method, AllowMultiple = falsk)] public sealed class MyInterceptorMethodAttribute : Attribute { } Därefter definieras etiketten som ska fästas vid klassen:
Här är en MyAopHandler-klass definierad och implementerad enligt följande:
Observera att den specifika operationsdelen av koden ovan motsvarar en "proxyklass", som i princip ändrar kontexten för metodexekveringen. Objektorienterade programstrukturer såsom delegater kan användas för att exponera den specifika implementationen för omvärlden för sekundär utveckling. |
Föregående:ES5, ES6, ES2016, ES. Nästa: Vad händer med versionen av Javascrip{filter}t?Nästa:PowerShell Komma igång handledning - version v0.3
|