Kukla için AOP kavramları açıklandı


19

Birisi aptallar için AOP kavramlarını açıklayabilir mi: birleşme noktası, nokta kesimi, dokuma vb.

Örneğin: Unsur: çoklu sınıfları kesen bir endişenin modülerleştirilmesi. Bu ne anlama geliyor?

Yanıtlar:


15

Endişeyi, günlüğe kaydetme, denetleme, güvenlik gibi bir işlevsellik grubu olarak düşünün

Bu işlevsellikler çoğu kodda mevcuttur, ancak hayvan -> köpek sınıflarımızda gerçekten yaşamazlar - birçok sınıfta yaşaması gereken işlevselliklerdir - bunlar kesişen endişelerdir .

  • Bir Birleşim Noktası , kodda en / boy kodunun gerçekte çalıştırıldığı bir yerdir.

  • Bir nokta kesimi , ortak noktada hangi kodun çalıştığını söyler.

  • Dokuma - derleyici / sistem normal kodunuzu aldığında ve doğru kodu tetikleyecek şekilde tüm AOP kodunu içerdiğinde - bunu ekstra bir derleme adımı olarak düşünebilir.

Basit, anlaşılır bir örnek:

  1. Hata ayıklama amacıyla tüm yöntem çağrılarını izlemek istiyoruz (yani hangi yöntemlerin hangi sırayla çağrıldığını görmek istiyoruz).
  2. Çağrıldığında yöntemin adını kaydeden bir özellik oluşturuyoruz
  3. Yönü koddaki tüm yöntemlerle ilişkilendiren nokta kesimleri oluştururuz. Çoğu AOP çerçevesinde bunu bazı joker kartlarla kolayca yapabilirsiniz
  4. Şimdi şimdiye kadar çağrılan her yöntemin günlüğü var.

Terminolojinin farklı uygulamalar ve AOP çerçeveleri arasında biraz farklı olduğunu lütfen unutmayın.


Aynen uzun cevabımı yazarken olduğu gibi! Seninki daha özlü, hoşuma gitti. Netlik için hafifçe düzenleyecektir.
Martijn Verburg

Teşekkürler, biçimlendirme kurallarını öğrenmeli, unutmaya devam etmeliyim.
Jonno

Bunun Python dekoratörleri veya Lisp makroları- Y / N ile uygulanması basit gibi görünüyor mu?
Paul Nathan

@Paul - korktuğum ve hızlı bir google bana her iki şekilde de cevap verebilecek kadar fikir vermediğinden bahsettiğiniz her iki yapıya aşina değil.
Jonno

@PaulNathan: AOP dinamik dillerde oldukça basit. Öğleden sonra basit bir AOP çerçevesi oluşturulabilir. Java gibi derlenmiş dillerde yaşam çok tatlı değildir.
kevin cline

-1

Sırayla oku

Her tanım öncekiler üzerine kuruludur.

Çapraz kesim endişesi

Uygulamanız boyunca sizi her yerde rahatsız eden (çapraz kesen) bir şey. günlük kaydı veya güvenlik

Görünüş

Mevcut kodunuzun önüne , arkasına veya her ikisine ( etrafına ) otomatik olarak eklenen bir kod parçası

PointCut ve 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

Pointcut

Kod yürütmesinde, yönün bir kısmının yürütüldüğü bir yer.

JoinPoint

Görünüşünüzün noktaya "katıldığı" nokta. "Before" joinPoint'te parametrelere, "join" joinPoint'te ise dönüş değerine erişebileceksiniz. Bir istisna atılırsa, işlemek veya yeniden atmak için bir "try-catch-nihayet" gerekebilir.

Dokuma

Bir nokta kesimi etrafına yönler ekleme işlemi


Cevabımı kim oyladıysa, lütfen neden bir yorum bırakın - sakıncası yoksa. Söz veriyorum bununla ilgili bir tartışma başlatmayacağım. Bununla birlikte, daha iyi ne yapabileceğimi bilmek isterdim. Teşekkür ederim!
Prashant
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.