Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 21364|Odgovoriti: 1

[Vir] .net/C# uporablja atribute za implementacijo preprostega AOP

[Kopiraj povezavo]
Objavljeno na 18. 04. 2017 14:54:11 | | |

Začnimo s preprostim kosom kode:



Recimo, da gre za spletni program, najprej želimo preveriti sejo, nato preveriti dovoljenja, začeti transakcijo, napisati dnevnik, nato izvesti samo operacijo in na koncu zapisati dnevnik. Očitno ne moremo napisati vseh klicev metod za zgoraj omenjene operacije v DoSomething(), zato bo koda postala velik zanič, kaj naj torej storimo?

Obstaja veliko načinov za implementacijo, na primer z uporabo ogrodij, kot je Spring, vendar v dejanskih projektih ni mogoče okvirja uvesti kar tako, pogosto pa moramo nekatere mehanizme napisati sami.

Tukaj pomislim na filter v MVC – dokler na kontroler ali akcijo dodaš oznako atributa, lahko narediš še nekaj drugih stvari pred in po izvedbi metode. Torej preprosto simulirajmo implementacijo filtra.

Najprej se izvirna metoda preoblikuje v eleganten način označevanja značilnosti:




Pri oznakah značilnosti morajo obstajati razredi, ki ustrezajo oznakam značilnosti, pa tudi implementacije AOP, ki so lahko neodvisno vsebovane v datoteki ali asembleru.

Najprej oznaka, pritrjena na metodo, implementirana kot prazna:

//贴在方法上的标签
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
javni zaprti razred MyInterceptorMethodAttribute : Attribute { }
Nato določimo oznako, ki je pripeta razredu:




Tukaj je razred MyAopHandler, definiran in implementiran na naslednji način:




Upoštevajte, da je specifični operativni del kode zgoraj ekvivalenten "proxy razredu", ki v bistvu spremeni kontekst izvajanja metode. Objektno usmerjene programske strukture, kot so delegati, se lahko uporabijo za izpostavljanje specifične implementacije zunanjemu svetu za sekundarni razvoj.




Prejšnji:ES5, ES6, ES2016, ES. Naslednje: Kaj se dogaja z različico Javascrip{filter}t?
Naslednji:PowerShell uvodni vodič - različica v0.3
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com