|
|
Publisert på 18.04.2017 14:54:11
|
|
|

La oss starte med en enkel kode:
La oss si at dette er et webprogram, vi vil sjekke økten først, så sjekke tillatelsene, starte en transaksjon, skrive en logg, så utføre selve operasjonen, og til slutt skrive en logg. Åpenbart kan vi ikke skrive alle metodekallene til de ovennevnte operasjonene i DoSomething(), så koden vil bli en stor dritt, så hva bør vi gjøre?
Det finnes mange måter å implementere det på, som å bruke rammeverk som Spring, men i faktiske prosjekter er det ikke mulig å introdusere et rammeverk uformelt, og ofte må vi skrive noen mekanismer selv.
Her tenker jeg på Filteret i MVC, så lenge du setter en attributttagg på Kontrolleren eller Handlingen, kan du gjøre noen andre ting før og etter at metoden kjøres. Så la oss enkelt simulere en filterimplementering.
Først og fremst er den opprinnelige metoden omgjort til en elegant måte å bruke funksjonsetiketter på:
Med feature-tagger må det finnes klasser som tilsvarer feature-tagger, samt AOP-implementasjoner, som kan være uavhengig inneholdt i en fil eller assembly.
Først, etiketten knyttet til metoden, implementert som tom:
//贴在方法上的标签 [AttributeUsage(AttributeTargets.Method, AllowMultiple = falsk)] offentlig sealed class MyInterceptorMethodAttribute : Attribute { } Deretter definerer du etiketten som skal knyttes til klassen:
Her er en MyAopHandler-klasse definert, implementert som følger:
Merk at den spesifikke operasjonsdelen av koden ovenfor tilsvarer en "proxy-klasse", som i praksis endrer konteksten for metodens utførelse. Objektorienterte programstrukturer som delegater kan brukes til å eksponere den spesifikke implementasjonen for omverdenen for sekundær utvikling. |
Foregående:ES5, ES6, ES2016, ES. Neste: Hva skjer med versjonen av Javascrip{filter}t?Neste:PowerShell Komme i gang-veiledning - v0.3-versjon
|