Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 21364|Відповідь: 1

[Джерело] .net/C# використовує атрибути для реалізації простого AOP

[Копіювати посилання]
Опубліковано 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
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com