Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 21364|Atsakyti: 1

[Šaltinis] .net/C# naudoja atributus paprastam AOP įgyvendinti

[Kopijuoti nuorodą]
Paskelbta 2017-04-18 14:54:11 | | |

Pradėkime nuo paprasto kodo gabalo:



Taigi tarkime, kad tai yra žiniatinklio programa, pirmiausia norime patikrinti sesiją, tada patikrinti leidimus, pradėti operaciją, parašyti žurnalą, tada atlikti pačią operaciją ir galiausiai parašyti žurnalą. Akivaizdu, kad negalime parašyti visų metodo iškvietimų į aukščiau nurodytas operacijas DoSomething(), todėl kodas taps dideliu šūdo gabalu, tad ką turėtume daryti?

Yra daugybė būdų, kaip tai įgyvendinti, pavyzdžiui, naudojant tokias sistemas kaip pavasaris, tačiau tikruose projektuose neįmanoma atsitiktinai įvesti sistemos, o kai kuriuos mechanizmus daug kartų turime parašyti patiems.

Čia aš galvoju apie filtrą MVC, kol jūs įdėti atributo žymę ant valdiklio ar veiksmo, galite padaryti kai kuriuos kitus dalykus prieš ir po metodo vykdymo. Taigi paprasčiausiai imituokime filtro diegimą.

Visų pirma, originalus metodas paverčiamas elegantišku etikečių būdu:




Naudojant funkcijų žymes, turi būti klasės, atitinkančios funkcijų žymes, taip pat AOP įgyvendinimai, kurie gali būti atskirai įtraukti į failą ar rinkinį.

Pirma, prie metodo pridėta etiketė, įgyvendinta kaip tuščia:

//贴在方法上的标签
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
vieša uždaryta klasė MyInterceptorMethodAttribute : Atributas { }
Po to apibrėžkite žymą, kuri bus pridėta prie klasės:




Čia yra MyAopHandler klasė apibrėžta, įgyvendinta taip:




Atkreipkite dėmesį, kad konkreti aukščiau pateikto kodo operacijos dalis yra lygiavertė "proxy klasei", kuri iš esmės keičia metodo vykdymo kontekstą. Objektinės programos struktūros, tokios kaip delegatai, gali būti naudojamos norint atskleisti konkretų įgyvendinimą išoriniam pasauliui antriniam vystymuisi.




Ankstesnis:ES5, ES6, ES2016, ES. Kitas: Kas vyksta su "Javascrip{filter}t" versija?
Kitą:"PowerShell" darbo pradžios pamoka – v0.3 versija
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com