Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 21364|Răspunde: 1

[Sursă] .net/C# folosește Attributes pentru a implementa AOP simplu

[Copiază linkul]
Postat pe 18.04.2017 14:54:11 | | |

Să începem cu o bucată simplă de cod:



Să presupunem că este un program web, vrem să verificăm mai întâi sesiunea, apoi permisiunile, să începem o tranzacție, să scriem un jurnal, apoi să executăm operația propriu-zisă și, în final, să scriem un jurnal. Evident, nu putem scrie toate apelurile de metodă pentru operațiunile de mai sus în DoSomething(), așa că codul va deveni o mare mizerie, deci ce ar trebui să facem?

Există multe moduri de a o implementa, cum ar fi folosirea unor framework-uri precum spring, dar în proiectele propriu-zise nu este posibil să introduci un cadru casual, iar de multe ori trebuie să scriem niște mecanisme pe cont propriu.

Aici mă gândesc la Filter în MVC, atâta timp cât pui o etichetă de atribut pe Controller sau Action, poți face și alte lucruri înainte și după ce metoda este executată. Așadar, să simulăm pur și simplu o implementare a unui filtru.

În primul rând, metoda originală este transformată într-o modalitate elegantă de etichete de caracteristici:




În cazul etichetelor de caracteristici, trebuie să existe clase corespunzătoare etichetelor de caracteristici, precum și implementărilor AOP, care pot fi conținute independent într-un fișier sau asamblare.

Mai întâi, eticheta atașată metodei, implementată ca vid:

//贴在方法上的标签
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
clasa publică sigilată MyInterceptorMethodAttribute : Attribute { }
După aceea, definește eticheta care urmează să fie atașată clasei:




Iată o clasă MyAopHandler definită, implementată astfel:




Rețineți că partea specifică de operare a codului de mai sus este echivalentă cu o "clasă proxy", care practic schimbă contextul execuției metodei. Structurile de programe orientate pe obiecte, cum ar fi delegații, pot fi folosite pentru a expune implementarea specifică lumii exterioare pentru dezvoltare secundară.




Precedent:ES5, ES6, ES2016, ES. Următorul: Ce se întâmplă cu versiunea de Javascrip{filter}t?
Următor:PowerShell Tutorial pentru începuturi - versiunea v0.3
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com