Sunday, January 31, 2010

Aspect Oriented Programming (AOP)

AOP เอาไว้แก้ปัญหาเรื่อง Cross cutting concern (เอาให้ง่าย ๆ ก็คือการตัดผ่านเฉพาะสิ่งที่สนใจ)

ตัวอย่างเช่นเราจะทำระบบอะไรสักอย่าง แล้วมี cross cutting concern ที่ตัดผ่านคลาสของเราหลายอย่าง เช่น security logging message, availability ต่างๆ เป็นต้น ซึ่งอาจจะเป็นทั้ง functional หรือ non-function requirement ของระบบก็ได้ค่ะ

แต่ในบางคลาส อาจจะมี แค่ logging แต่ไม่มี security ซึ่งใช้ concern พวกนี้ไม่เท่ากันก็ได้

เวลา implement ด้วยแนวทาง OOP จึงทำให้เกิดปัญหาต่างๆ คือ
- concern เหล่านี้ลากตัดผ่านกระจัดกระจาย ทั่วไปในงานเรา (scattering) บางงานใช้บ้าง ไม่ใช้บ้าง
- โค๊ดของงานเราในแต่ละ modular ยุ่งเหยิง (tangling) เพราะมัวแต่ไปจัดการเรื่อง cross cutting เหล่านี้

เมื่อเป็นเช่นนี้แ้ล้วก็ระบบก็จะมี low cohesive เกิด high coupling ไ่ล่ code ก็ยาก แ้ล้วก็ reuse ได้ยากอีกด้วย

แนวทางใหม่ที่นำเสนอขึ้นนั่นคือ AOP (Aspect Oriented Programming)ค่ะ

ซึ่งจะสร้าง โปรแกรมขี้นมาเป็น AOP เพื่อที่จะเขียนคลาสสำหรับ concern ที่มีการตัดผ่านระหว่างคลาสของระบบเรา
โดยแบ่งออกเป็น Aspect ต่างๆ และเขียนแยกออกจาก core concern แล้วก็สร้างกฎสำหรับบอกว่า แต่ละ Aspect นั้นจะลากตัดผ่านยังไงบ้าง กฎนี้เราเรียกว่า Weaving Rules เมื่อเราทำการ weaving ไปผ่านตัว Aspect Weaver เจ้า Aspect เหล่านี้ก็จะไปลากตัดผ่าน core concern ให้เราเองตามที่กำหนดไว้

อ้างอิง : http://www.blognone.com/node/1426