Punkt cięcia - Pointcut

W programowaniu zorientowanym aspektowo , pointcut to zbiór punktów złączenia . Pointcut określa, gdzie konkretnie zastosować porady , co pozwala na wyodrębnienie wątpliwości i pomaga w modularyzacji logiki biznesowej. Punkty są często określane za pomocą nazw klas lub nazw metod, w niektórych przypadkach za pomocą wyrażeń regularnych, które pasują do nazwy klasy lub metody. Różne platformy obsługują różne wyrażenia Pointcut; Składnia AspectJ jest de facto standardem. Dostępne są frameworki dla różnych języków programowania, takich jak Java , Perl , Ruby i wielu innych obsługujących pointcut.

Tło

Ze względu na ograniczenia w różnych językach programowania, problem przekrojowy nie uległ zmodularyzacji. Problem przekrojowy odnosi się do części oprogramowania, które logicznie należą do jednego modułu i wpływają na cały system: może to być na przykład bezpieczeństwo lub logowanie. Programowanie zorientowane aspektowo próbuje rozwiązać te problemy przekrojowe, umożliwiając programistom pisanie modułów zwanych aspektami, które zawierają fragmenty kodu wykonywane w określonym punkcie. Wyrażenia wymagane do wybrania konkretnego punktu doprowadziły do ​​stworzenia Wyrażeń Pointcut.

Wykonanie

Za każdym razem, gdy wykonanie programu osiągnie jeden z punktów złączenia opisanych w przecięciu punktu, wykonywany jest fragment kodu powiązany z przecięciem punktu (tzw. porada). Pozwala to programiście opisać, gdzie i kiedy należy wykonać dodatkowy kod oprócz już zdefiniowanego zachowania. Pointcut umożliwia dodawanie aspektów do istniejącego oprogramowania, a także projektowanie oprogramowania z wyraźnym oddzieleniem obaw , w którym programista wplata (łączy) różne aspekty w kompletną aplikację.

Przykład

Załóżmy, że istnieje aplikacja, w której możemy modyfikować rekordy w bazie danych . Za każdym razem, gdy użytkownicy modyfikują bazę danych, chcemy mieć dziennik informacji o tym, kto modyfikuje rekordy. Tradycyjnym sposobem rejestrowania jest wywołanie metody dziennika tuż przed modyfikacją bazy danych. Przy programowaniu aspektowym możemy zastosować pointcut do metody Modify Database i otrzymać poradę, która jest wywoływana w celu zarejestrowania wymaganych informacji.

Wyrażenia

Poniżej znajdują się niektóre z ważnych wyrażeń punktowych obsługiwanych przez AspectJ . Wyrażenia te można łączyć za pomocą operatorów logicznych.

execution(void User.setPassword(password))

Ten punkt przecięcia odpowiada wykonaniu metody User.setPassword.

call(void User.getPassword())

Po wywołaniu User.getPassword ten punkt odcięcia jest dopasowywany.

handler(ArrayIndexOutOfBounds)

Pointcut będzie pasować, gdy wystąpi wyjątek ArrayIndexOutOfBounds

this(UserType)

Pointcut będzie pasować, gdy aktualnie wykonywany obiekt będzie typu UserType.

target(UserType)

Pointcut będzie pasować, gdy obiekt docelowy jest typu UserType.

within(UserType)

Pointcut będzie pasować, gdy wykonywany kod należy do UserType.

Krytyka

Języki Pointcut wpływają negatywnie na ważne właściwości oprogramowania, takie jak ewolucja i zrozumiałość. Może zaistnieć możliwość, gdy istnieje potrzeba wykonania refaktoryzacji w celu zdefiniowania poprawnego aspektu, co generalnie nie powinno mieć miejsca, ponieważ refaktoryzacja ma na celu uporządkowanie kodu. Nie jest również skalowalny, gdy istnieje wiele aspektów do zastosowania w tym samym kodzie, a każdy aspekt wymaga innej refaktoryzacji. Ogólnie rzecz biorąc, każdy aspekt będzie ściśle powiązany ze strukturą aplikacji, ponieważ punkty podcięcia zawierają jawnie sygnaturę metody, więc gdy aplikacja zmieni się, punkt podcięcia również musi zostać zmieniony. Może to być dość problematyczne dla programisty.

Bibliografia

Zewnętrzne linki