|
|
Zverejnené 18. 4. 2017 14:54:11
|
|
|

Začnime jednoduchým kódom:
Povedzme, že ide o webový program, najprv chceme skontrolovať reláciu, potom oprávnenia, spustiť transakciu, napísať log, potom vykonať samotnú operáciu a nakoniec napísať log. Samozrejme, nemôžeme napísať všetky volania metód do vyššie uvedených operácií v DoSomething(), takže kód sa stane veľkým problémom, čo teda máme robiť?
Existuje mnoho spôsobov, ako ho implementovať, napríklad pomocou frameworkov ako spring, ale v skutočných projektoch nie je možné framework zaviesť len tak a často musíme niektoré mechanizmy napísať sami.
Tu si predstavujem filter v MVC – pokiaľ dáte atribútový tag na Controller alebo Action, môžete robiť aj iné veci pred a po vykonaní metódy. Takže jednoducho simulujme implementáciu filtra.
V prvom rade sa pôvodná metóda transformuje na elegantný spôsob označovania funkcií:
Pri feature tagoch musia existovať triedy zodpovedajúce feature tagom, ako aj AOP implementácie, ktoré môžu byť nezávisle obsiahnuté v súbore alebo assembleri.
Najprv označenie pripojené k metóde, implementované ako prázdne:
//贴在方法上的标签 [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] public sealed class MyInterceptorMethodAttribute : Attribute { } Potom definujeme označenie, ktoré sa má priradiť k triede:
Tu je trieda MyAopHandler definovaná, implementovaná nasledovne:
Všimnite si, že časť špecifickej operácie vyššie uvedeného kódu je ekvivalentná "proxy triede", ktorá v podstate mení kontext vykonávania metódy. Objektovo orientované programové štruktúry, ako sú delegáti, môžu byť použité na sprístupnenie konkrétnej implementácie vonkajšiemu svetu pre sekundárny vývoj. |
Predchádzajúci:ES5, ES6, ES2016, ES. Ďalej: Čo sa deje s verziou Javascrip{filter}t?Budúci:PowerShell Úvodný tutoriál - verzia v0.3
|