Oyunun sonlarına geliyorum, ama bunu bu soruya rastlayabilecek daha sonraki geliştiriciler için sağlıyorum.
Uygulamanızın düzgün çalışmasına bağlıysa AOP'ye karşı şiddetle tavsiye ederim . Unsurlar şu şekilde çalışır:
- Tavsiye (ek davranış) uygulanır
- Birleştirme noktaları (ekstra kodun eklenebileceği yerler, böyle bir yöntem başlangıç veya bitiş veya belirli bir olay tetiklendiğinde)
- ... nokta kesimi (belirli bir birleşme noktasının eşleşip eşleşmediğini tespit eden bir desen) desenlerinin eşleştiği
Bilgisayarları uzun zamandır yapan herkes için, desenlerin kullanılması gerçeği yakından bakmak bir şey olabilir. Burada set
, bağımsız değişkenlerden bağımsız olarak adlandırılan herhangi bir yöntemle eşleşen bir nokta kesimine örnek verilmiştir :
call(* set(..))
Bu oldukça süpürücü bir nokta ve bunu dikkatli bir şekilde kullanmanız tavsiye edilir (cinayet amaçlı değildir) çünkü birçok şeye tavsiye uyguluyorsunuz.
Ya da heck, adından veya imzasından bağımsız olarak her şeye tavsiye uygulayalım !
execution(* *(..))
Açıkça dikkatli olmalıyız çünkü burada çok fazla güç var, ancak bu yönlere karşı bir argüman değil - bu bir uyarı argümanı çünkü burada çok fazla güç var ve desen eşleştirme kolayca ters gidebilir (sadece en sevdiğiniz arama motoruna çarpın aop böcek ve eğlenin).
İşte nispeten güvenli bir nokta gibi görünüyor:
pointcut setter(): target(Point) &&
( call(void setX(int)) ||
call(void setY(int)) );
Bu, adlandırılmış setX
veya setY
bir Point
nesne üzerinde yöntemler bulunursa açıkça tavsiye sağlar . Yöntemler sadece int
s alabilir ve olmalıdır void
. Oldukça güvenli görünüyor, değil mi? Bu yöntemler varsa ve doğru tavsiyeyi uyguladıysanız, bu güvenlidir. Değilse, çok kötü; sessizce başarısız olur.
Bir örnek vermek gerekirse, bir arkadaşım herkesin bir zamanlar yanlış bir veri döndüreceği bir Java uygulamasında hata ayıklamaya çalışıyordu. Nadir görülen bir başarısızlıktı ve herhangi bir özel olay veya veri ile ilişkili görünmüyordu. Test etmek veya tespit etmek çok zor olan bir iş parçacığı hatasıydı. Anlaşıldığı gibi, yöntemleri kilitlemek ve bunları "iş parçacığı güvenli" yapmak için yönleri kullanıyorlardı, ancak bir programcı bir yöntemi yeniden adlandırdı ve bir nokta kesimi, eşleşemedi ve böylece uygulamanın sessiz bir şekilde kırılmasına neden oldu.
Böylece, insanlara, AOP kullanmaları gerekiyorsa, istisnalar gibi yönleri tedavi etmek için söylüyorum: iyi tasarlanmış bir sistemde ve hiçbir şey yanlış gitmezse, kaldırılabileceklerini ve yazılımın hala düzgün çalıştığını söyleyebilirim . Ancak, programın işlevselliği AOP'ye bağlıysa, programınıza garanti edilmeyen bir kırılganlık sağlarsınız.
Bu nedenle, günlüğe kaydetme, hata ayıklama ve izleme, yönler için mükemmel olan, ancak güvenlik için mükemmel davranış örneklerinden biridir? Hayır! İplik güvenliği? Hayır!
AOP'ye sağlam bir alternatif için özelliklere bakın . Dile cıvatalanmak yerine, doğrudan dile entegre edilirler, "özellikli" bir IDE'ye ihtiyaç duymazlar (yardımcı olabilir) ve ihtiyaç duyduğunuz yöntemler mevcut değilse derleme zamanı arızalarına sahip olurlar. Sorunlar başlangıçtan itibaren daha iyi tanımlandığından, özellikler endişelerin ayrılmasını ele almak için çok daha temiz bir iş yapar. Onları çok kullanıyorum ve harikalar.