Saturday, April 21, 2007

เหตุผลที่ AOP แตกต่างจาก MOP

ผมกำลังสร้างระบบย่อยเชิงลักษณะ (AOP subsystem) สำหรับ Groovy โดยอิมพลีเม้นต์บน Meta Object Protocol (MOP - ระเบียบการเหนือวัตถุ?) ให้สนับสนุนสมบัติหลัก 2 ประการของแบบจำลอง pointcut-advice นั่นคือ การเลือกเชิงปริมาณ (Quantification) และ การไม่รับรู้ (Obliviousness)

โดยปกติ การใช้เมต้าคลาสใน Groovy ก็สนับสนุนการไม่รับรู้ของวัตถุเป้าหมายได้อยู่แล้วเนื่องจากระเบียบการเหนือวัตถุจะใช้เมต้าคลาสของแต่ละวัตถุในการเรียกใช้เมธอดและเข้าถึงสมบัติของวัตถุนั้น ๆ
สิ่งที่ขาดไปก็คือการเลือกเชิงปริมาณ ที่ใน AspectJ ใช้ wildcard เพื่อเลือกหลาย ๆ joinpoint จาก ประโยค pointcut เพียง 1 ประโยค
รวมถึงจุดเล็ก ๆ น้อย ๆ ในการอิมพลีเม้นต์ที่ยอมให้พฤติกรรมซับซ้อนเช่น proceed หลายระดับใน advice แบบ around ทำได้ง่ายขึ้น
และนี่คือจุดสำคัญที่ AOP แตกต่างจาก MOP และเป็นเหตุผลว่าทำไม AOP ถึงยังจำเป็นแม้จะมี MOP อยู่แล้วในภาษาพลวัตร

No comments: