|
|
Postitatud 18.04.2017 14:54:11
|
|
|

Alustame lihtsast kooditükist:
Oletame, et tegemist on veebiprogrammiga, kontrollime kõigepealt sessiooni, siis kontrollime õigusi, alustame tehingut, kirjutame logi, seejärel käivitame operatsiooni ja lõpuks kirjutame logi. Ilmselgelt ei saa me kõiki metoodikutsunguid ülaltoodud operatsioonidele DoSomething() kirjutada, nii et kood muutub suureks jamaks, nii et mida peaksime tegema?
Selle rakendamiseks on palju viise, näiteks raamistike nagu spring kasutamine, kuid tegelikes projektides ei ole võimalik raamistikku juhuslikult tutvustada ning tihti peame ise mõned mehhanismid kirjutama.
Siin mõtlen MVC filtrile, kui paned atribuudi sildi kontrollerile või tegevusele, saad enne ja pärast meetodi käivitamist teha muid asju. Simuleerime lihtsalt filtri rakendamist.
Esiteks muudetakse algne meetod elegantseks tunnusmärgiste viisiks:
Funktsioonisiltide puhul peavad olema klassid, mis vastavad funktsioonisiltidele, samuti AOP rakendused, mida saab iseseisvalt sisaldada failis või assamblees.
Esiteks meetodile lisatud silt, mis on rakendatud kui tühi:
//贴在方法上的标签 [AttributeUsage(AttributeTargets.Method, AllowMultiple = vale)] public suletud klass MyInterceptorMethodAttribute : Atribuut { } Seejärel määra klassile lisatav silt:
Siin on MyAopHandler klass, mis on defineeritud, implementeeritud järgmiselt:
Pane tähele, et ülaltoodud koodi konkreetne operatsiooniosa on ekvivalentne "proxy klassiga", mis sisuliselt muudab meetodi täitmise konteksti. Objektorienteeritud programmistruktuure, nagu delegaadid, saab kasutada konkreetse rakenduse tutvustamiseks välismaailmale sekundaarseks arenduseks. |
Eelmine:ES5, ES6, ES2016, ES. Järgmine: Mis toimub Javascrip{filter}t versiooniga?Järgmine:PowerShelli alustamise õpetus - v0.3 versioon
|