Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 21364|Отговор: 1

[Източник] .net/C# използва атрибути за реализиране на прост AOP

[Копирай линк]
Публикувано в 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
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com