Saturday, April 29, 2006

กลไกการสาน code ที่มีผลจากการใช้ IF pointcut

เราสามารถประกาศ pointcut แบบมีเงื่อนไขด้วย if(...) pointcut ใน Aspect J แต่ผลการทำงานของ pointcut ตัวนี้จะเป็นการทำงานขณะ runtime คือเงื่อนไขที่ระบุใน if(...) จะถูก bypass ขณะที่ weaver สาน code และจะนำเงื่อนไขดังกล่าวไปฝังไว้ใน advice เพื่อประมวลผลอีกทีโดยใช้ reflection ตอนโปรแกรมรันแล้ว



ผมคิดว่าเหตุผลก็คือ ผู้พัฒนา AspectJ ไม่มีทางรู้ล่วงหน้าว่าผู้ใช้ AspectJ จะประกาศเงื่อนไขพลิกแพลงขนาดไหน จึงใช้วิธีสร้าง if pointcut ที่ครอบคลุมการใช้งานได้ทุก ๆ กรณี



ในขณะที่บางงานที่ต้องการ code optimisation (อย่างเช่นงานที่ผมกำลังทำอยู่) ต้องการ code ที่ค่อนข้างรัดกุมและอยากจะเลี่ยงการประมวลผลด้วย reflection ให้ได้มากที่สุด ตัว if pointcut จึงกลายเป็นตัวปัญหา

No comments: