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