Koncepcje AOP wyjaśnione dla manekina


19

Czy ktoś może wyjaśnić koncepcje AOP dla manekinów: punkt połączenia, cięcie punktowe, tkanie itp

Na przykład: Aspekt: modularyzacja problemu obejmująca wiele klas. Co to znaczy?

Odpowiedzi:


15

Pomyśl o problemie jako o grupie funkcji, np. Rejestrowanie, audyt, bezpieczeństwo

Te funkcje są zawsze obecne w większości kodu, ale tak naprawdę nie na żywo w naszym zdrowiem zwierząt> Nauka psa - są to funkcje, które powinny żyć w wielu zajęć - są poprzeczne cięcie obawy .

  • JoinPoint to miejsce w kodzie gdzie kod aspekt jest rzeczywiście uciekł.

  • Punktu przekroju jest to, jak mówią, co kod jest uruchamiany na jointpoint.

  • Tkactwo - kiedy kompilator / System bierze swój normalny kod i zawiera cały kod AOP tak, że wyzwala prawidłowy kod etc - można myśleć o tym jako dodatkową pre-kompilacji kroku.

Prostym zrozumiałym przykładem jest:

  1. Chcemy śledzić wszystkie wywołania metod w celu debugowania (tzn. Chcemy zobaczyć, które metody są wywoływane w jakiej kolejności).
  2. Tworzymy aspekt, który rejestruje nazwę metody po jej wywołaniu
  3. Tworzymy punkty, które łączą aspekt ze wszystkimi metodami w kodzie. W większości platform AOP możesz to łatwo zrobić za pomocą niektórych symboli wieloznacznych
  4. Mamy teraz rejestrowanie każdej wywoływanej metody.

Należy pamiętać, że terminologia różni się nieznacznie między różnymi implementacjami i platformami AOP.


Tak jak pisałem swoją długą odpowiedź! Twoja jest bardziej zwięzła, podoba mi się. Zredaguje to lekko dla jasności.
— Martijn Verburg,

Dzięki, powinienem nauczyć się zasad formatowania, ciągle zapominam.
— Jonno

Wydaje się, że byłoby to łatwe do wdrożenia przy użyciu dekoratorów Python lub makr Lisp - T / N?
— Paul Nathan

@Paul - nie zna ani konstruktu można wymienić Obawiam i szybkie google nie dał mi wystarczająco dużo, aby odpowiedzieć na wgląd w obu kierunkach.
— Jonno

@PaulNathan: AOP jest dość prosty w dynamicznych językach. Prostą strukturę AOP można utworzyć po południu. W skompilowanych językach, takich jak Java, życie nie jest takie słodkie.
— kevin cline

-1

Czytaj w sekwencji

Każda definicja opiera się na poprzednich.

Krzyż problemem cięcia

Coś, co przeszkadza (dotyczy) wszędzie (przekrojowo) w całej aplikacji. np rejestrowania lub bezpieczeństwa

Aspekt

Fragment kodu, który jest automatycznie dodawany przed , po lub jednocześnie ( wokół ) istniejącego kodu

Punkty przekroju & JoinPoint

                  Application code
                           |
                           |
                           |
                           |
                          \|/
                           |
JoinPoint  ----------->("before" aspect, on the way in)  // just before your intercepted application code
Pointcut start--------> public String myMethod(params ...)
                   //your application code
Pointcut finish--------> return (foo)
JoinPoint  ----------->("after" aspect, on the way out)  // just after your intercepted application code
                           |
                          \|/
                           |
                           |
                           |
                  Application code

Punkty przekroju

Miejsce w wykonywaniu kodu, w którym wykonywana jest część aspektu.

JoinPoint

Punkt, w którym twój aspekt „łączy się” z cięciem punktowym. Na „przed” JoinPoint będziesz miał dostęp do parametrów, co „po” JoinPoint będziesz mieć dostęp do wartości zwracanej. Jeśli jest wyjątek, możesz potrzebować „try-catch-finally” do uchwytu lub re-rzucić.

Tkactwo

Proces dodawania aspekty wokół punktu przekroju


Ktokolwiek głosował za moją odpowiedzią, proszę zostawić komentarz dlaczego - jeśli nie masz nic przeciwko. Obiecuję, że nie zacznę od tego dyskusji. Chciałbym jednak wiedzieć, co mogłem zrobić lepiej. Dziękuję Ci!
— Prashant
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.