|
|
Közzétéve 2017. 04. 18. 14:54:11
|
|
|

Kezdjük egy egyszerű kóddal:
Tegyük fel, hogy ez egy webprogram, először ellenőrizni akarjuk a munkamenetet, aztán ellenőrizni a jogosultságokat, indítani egy tranzakciót, írni egy naplót, majd végrehajtani magát a műveletet, végül pedig naplót írni. Nyilvánvalóan nem tudjuk leírni az összes metódushívást a fent említett műveletekhez a DoSomething(), így a kód egy nagy szemétlá válik, szóval mit kellene tennünk?
Sokféleképpen lehet ezt megvalósítani, például olyan keretrendszerekkel, mint a spring, de tényleges projektekben nem lehet egy keretrendszert lazán bevezetni, és sokszor nekünk kell néhány mechanizmust magunknak megírnunk.
Itt az MVC-ben lévő szűrőre gondolok: ha egy attribútumcímkét helyezel a Kontrollerre vagy az Akcióra, akkor más dolgokat is meg lehet csinálni a metódus végrehajtása előtt és után. Szóval szimuláljunk egy szűrő implementációt.
Először is, az eredeti módszert elegáns jellemzőcímkék módjává alakítják:
A feature címkék esetén léteznek olyan osztályok, amelyek megfelelnek a feature címkéknek, valamint AOP megvalósításoknak, amelyek függetlenül is tartalmazhatók egy fájlban vagy assemblyben.
Először a metódushoz csatolt címké, amely üresen valósított meg:
//贴在方法上的标签 [AttributeUsage(AttributeTargets.Method, AllowMultiple = hamis)] public sealed class MyInterceptorMethodAttribute : Attribute { } Ezután definiáljuk az osztályhoz csatolandó címkét:
Íme egy MyAopHandler osztály, amely az alábbiak szerint van megvalósítva:
Fontos megjegyezni, hogy a fenti kód konkrét műveleti része egy "proxy osztálynak" felel meg, ami lényegében megváltoztatja a metódus végrehajtásának kontextusát. Objektumorientált programstruktúrák, mint például a delegáltak, használhatók arra, hogy a konkrét megvalósítást a külvilág számára mutassuk be másodlagos fejlesztésre. |
Előző:ES5, ES6, ES2016, ES. Következő: Mi történik a Javascrip{filter}t verzióval?Következő:PowerShell Kezdési Útmutató - v0.3 verzió
|