Spóźnię się do gry, ale zapewniam ją późniejszym programistom, którzy mogą natknąć się na to pytanie.
Zdecydowanie odradzam AOP jeśli aplikacja zależy na tym, aby działać poprawnie. Aspekty działa tak:
- Rada (dodatkowy zachowanie) jest stosowany do
- Dołącz punkty (miejsca, w których można dołączyć dodatkowy kod, taki początek lub koniec metoda A lub gdy dana wyzwalaczy zdarzeń)
- ... gdzie punktu przekroju (wzór, który wykrywa, czy dany punkt) dołączyć mecze dopasować wzory
Dla każdego, kto robi komputerów przez długi czas, fakt, że wzorce są wykorzystywane mogą być na co patrzeć uważnie. Więc tutaj jest przykład punkt przekroju, który odpowiada żadnej metody o nazwie set
niezależnie od argumentów:
call(* set(..))
Jest to więc dość obszerny punkt zwrotny i powinno być jasne, że radzenie sobie z tym ostrożnie jest zalecane (bez zamierzonej gry słów), ponieważ stosuje się porady do wielu rzeczy.
Lub cholery, niech stosuje porad wszystkim , bez względu na nazwę lub podpis!
execution(* *(..))
Widać więc, że powinniśmy być ostrożni, bo nie ma dużo energii tutaj, ale to nie jest argument przeciwko aspektach - to argument za ostrożnością, ponieważ jest tam dużo energii tutaj i dopasowywanie do wzorca można łatwo przejść na opak (tylko uderzyć swoją ulubioną wyszukiwarkę AOP błędy i zabawy).
Więc oto co wygląda stosunkowo bezpiecznego punktu przekroju:
pointcut setter(): target(Point) &&
( call(void setX(int)) ||
call(void setY(int)) );
Który wyraźnie stanowi porady jeśli metody nazwie setX
lub setY
na Point
obiekcie znajdują. Metody te mogą otrzymać tylko int
S i muszą byćvoid
. Wygląda całkiem bezpiecznie, prawda? Dobrze, że to bezpieczne, jeśli istnieją takie metody i masz zastosowano właściwą poradę. Jeśli nie, to źle; po cichu zawodzi.
Na przykład przyjaciel próbował debugować aplikację Java, w której wszyscy raz na jakiś czas zwracali nieprawidłowe dane. To była rzadka awaria i nie wydawała się być skorelowana z żadnym konkretnym zdarzeniem lub konkretnymi danymi. To był błąd, gwintowania, coś, co jest bardzo trudne do pomiaru lub wykrywania. Jak się okazuje, używali aspektów do blokowania metod i uczynienia ich „bezpiecznymi dla wątków”, ale programista zmienił nazwę metody i punkt nie pasował do niej, powodując w ten sposób cichą awarię aplikacji.
Dlatego mówię ludziom, że jeśli muszą używać AOP, do traktowania aspektów takich jak wyjątki: w dobrze zaprojektowanym systemie i jeśli nic nie pójdzie źle, można je usunąć, a oprogramowanie nadal działa poprawnie. Jeśli jednak funkcjonalność programu zależy od AOP, wprowadzasz do programu niestabilność, która jest nieuzasadniona.
Zatem rejestrowanie, debugowanie i śledzenie są świetnymi przykładami zachowań, które są idealne pod względem aspektów, ale bezpieczeństwa? Nie. Bezpieczeństwo wątku? Nie.
Dla solidnej alternatywy dla AOP patrz cechy . Zamiast być przymocowanym do języka, są one zintegrowane z nim bezpośrednio, nie potrzebują IDE „rozpoznającego cechy” (choć może to pomóc) i mają błędy w czasie kompilacji, jeśli wymagane metody nie są obecne. Cechy wykonują znacznie czystszą pracę w rozwiązywaniu problemów, ponieważ problem był lepiej definiowany od samego początku. Używam ich dużo i są fantastyczne.