Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 21364|Válasz: 1

[Forrás] A .net/C# az Attribútumokat használja az egyszerű AOP megvalósításához

[Linket másol]
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ó
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com