|
|
Опубліковано 18.04.2017 14:54:11
|
|
|

Почнемо з простого коду:
Отже, припустимо, це веб-програма: спочатку перевірити сесію, потім перевірити дозволи, почати транзакцію, написати журнал, потім виконати саму операцію і нарешті написати журнал. Очевидно, що ми не можемо записати всі виклики методів до вищезазначених операцій у DoSomething(), тому код стане справжнім лайном, тож що нам робити?
Існує багато способів реалізації, наприклад, використовуючи фреймворки, такі як spring, але в реальних проєктах неможливо ввести фреймворк випадково, і часто доводиться самостійно писати деякі механізми.
Тут я думаю про фільтр у MVC: якщо ви поставите тег атрибута на контролер або дію, можна робити інші речі до і після виконання методу. Тож давайте просто змоделюємо реалізацію фільтра.
По-перше, оригінальний метод перетворюється на елегантний спосіб позначення ознак:
З тегами функцій мають бути класи, що відповідають тегам фіналів, а також реалізації AOP, які можуть бути незалежно розміщені у файлі або асемблері.
По-перше, мітка, прикріплена до методу, реалізована як порожня:
//贴在方法上的标签 [AttributeUsage(AttributeTargets.Method, AllowMultiple = хибно)] публічно запечатаний клас MyInterceptorMethodAttribute : Атрибут { } Після цього визначте мітку, яку слід прикріпити до класу:
Ось клас MyAopHandler, визначений так:
Зверніть увагу, що конкретна частина коду вище еквівалентна «класу проксі», який фактично змінює контекст виконання методу. Об'єктно-орієнтовані структури програм, такі як делегати, можуть використовуватися для відкриття конкретної реалізації зовнішньому світу для вторинної розробки. |
Попередній:ES5, ES6, ES2016, ES. Далі: Що відбувається з версією Javascrip{filter}t?Наступний:Урок початку роботи з PowerShell — версія версії 0.3
|