|
|
Opublikowano 18.04.2017 14:54:11
|
|
|

Zacznijmy od prostego fragmentu kodu:
Załóżmy, że to program webowy – najpierw chcemy sprawdzić sesję, potem sprawdzić uprawnienia, rozpocząć transakcję, zapisać log, następnie wykonać samą operację, a na końcu zapisać log. Oczywiście nie możemy zapisać wszystkich wywołań metod do powyższych operacji w DoSomething(), więc kod stanie się wielkim bałaganem, więc co powinniśmy zrobić?
Istnieje wiele sposobów na jego implementację, na przykład korzystając z frameworków takich jak Spring, ale w rzeczywistych projektach nie da się wprowadzić frameworka na luzer, a często trzeba napisać niektóre mechanizmy samodzielnie.
Tutaj myślę o filtrze w MVC – jeśli umieścisz tag atrybutu na kontrolerze lub akcji, możesz robić inne rzeczy przed i po wykonaniu metody. Zatem po prostu symulujmy implementację filtra.
Przede wszystkim oryginalna metoda została przekształcona w elegancki sposób etykietowania cech:
W przypadku znaczników cech muszą istnieć klasy odpowiadające znacznikom cech, a także implementacje AOP, które mogą być niezależnie zawarte w pliku lub asemblerze.
Najpierw etykieta dołączona do metody, zaimplementowana jako pusta:
//贴在方法上的标签 [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] publiczna zamknięta klasa MyInterceptorMethodAttribute : Attribute { } Następnie definiuj etykietę, która ma być przypisana do klasy:
Oto klasa MyAopHandler zdefiniowana, zaimplementowana w następujący sposób:
Należy zauważyć, że specyficzna część operacji w powyższym kodzie jest równoważna "klasie proxy", która zasadniczo zmienia kontekst wykonania metody. Struktury programów obiektowych, takie jak delegaty, mogą być używane do udostępniania konkretnej implementacji światu zewnętrznemu do rozwoju wtórnego. |
Poprzedni:ES5, ES6, ES2016, ES. Następne: Co się dzieje z wersją Javascrip{filter}t?Następny:PowerShell Getting Started, Tutorial - wersja v0.3
|