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?

głupi Joe
źródło

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.

Jonno
źródło
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

Prashant
źródło
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