|
|
Zveřejněno 18.04.2017 14:54:11
|
|
|

Začněme jednoduchým kódem:
Řekněme, že je to webový program, chceme nejprve zkontrolovat relaci, pak zkontrolovat oprávnění, zahájit transakci, napsat log, pak samotnou operaci a nakonec zapsat log. Samozřejmě nemůžeme napsat všechny volání metod do výše uvedených operací do DoSomething(), takže kód se stane velkým šrotem, co tedy máme dělat?
Existuje mnoho způsobů, jak ji implementovat, například pomocí frameworků jako Spring, ale v reálných projektech není možné framework zavést jen tak náhodně, a často musíme některé mechanismy napsat sami.
Tady si představuji filtr v MVC – pokud na Controller nebo Action dáte atributový tag, můžete dělat i jiné věci před a po spuštění metody. Takže si jednoduše simulujme implementaci filtru.
Nejprve je původní metoda přeměněna na elegantní způsob označování funkcí:
U feature tagů musí existovat třídy odpovídající feature tagům, stejně jako implementace AOP, které mohou být samostatně obsaženy v souboru nebo assembleru.
Nejprve označení připojené k metodě, implementované jako prázdné:
//贴在方法上的标签 [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] veřejně zapečetěná třída MyInterceptorMethodAttribute : Attribute { } Poté definujeme štítek, který bude přiřazen ke třídě:
Zde je třída MyAopHandler definovaná, implementovaná následovně:
Všimněte si, že specifická část kódu výše je ekvivalentní "třídě proxy", která v podstatě mění kontext provádění metody. Objektově orientované programové struktury, jako jsou delegáti, lze použít k vystavení konkrétní implementace vnějšímu světu pro sekundární vývoj. |
Předchozí:ES5, ES6, ES2016, ES. Dále: Co se děje s verzí Javascrip{filter}t?Další:PowerShell Úvodní návod - verze v0.3
|