|
|
Публикувано в 18.04.2017 г. 14:54:11 ч.
|
|
|

Нека започнем с един прост код:
Да кажем, че това е уеб програма – първо трябва да проверим сесията, после да проверим разрешенията, да започнем транзакция, да напишем дневник, после да изпълним самата операция и накрая да напишем лог. Очевидно не можем да запишем всички извиквания на методи към горните операции в DoSomething(), така че кодът ще се превърне в голяма парче боклук, така че какво да правим?
Има много начини да се реализира, като използване на фреймуърци като spring, но в реални проекти не е възможно да се въведе рамка неформално, а често трябва да пишем някои механизми сами.
Тук мисля за филтъра в MVC – стига да сложиш атрибутен таг на контролера или действието, можеш да правиш и други неща преди и след изпълнението на метода. Нека просто симулираме филтърна имплементация.
Първо, оригиналният метод се трансформира в елегантен начин за етикетиране на характеристики:
При feature тагове трябва да има класове, съответстващи на feature тагове, както и AOP имплементации, които могат да бъдат независимо съдържани във файл или асемблер.
Първо, етикетът, прикрепен към метода, реализиран като празен:
//贴在方法上的标签 [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] публичен запечатан клас MyInterceptorMethodAttribute : Атрибут { } След това дефинирайте етикета, който да се прикрепи към класа:
Ето клас MyAopHandler, дефиниран и реализиран по следния начин:
Обърнете внимание, че конкретната част от кода по-горе е еквивалентна на "прокси клас", който по същество променя контекста на изпълнението на метода. Обектно-ориентирани програмни структури като делегати могат да се използват за излагане на конкретната реализация на външния свят за вторична разработка. |
Предишен:ES5, ES6, ES2016, ES. Следва: Какво се случва с версията на Javascrip{filter}t?Следващ:Урок за започване на PowerShell - версия v0.3
|