|
|
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
|