[AOP] Aspect Oriented Programming

พอดีได้รื้อพื้นความรู้เก่าๆ และก็เจอเรื่องน่าสนใจมาเขียน blog พอดีเลย เข้าเรื่องกันเลยดีกว่า AOP เนี่ย หรือ ชื่อทางการของมัน คือ Aspect Oriented Programming โดยเจ้า AOP เป็นแนวคิดนึง ที่เป็น Guideline ที่ช้วยในการพัฒนาระบบครับ เหมือนกับ OOP ที่มองทุกอย่างเป็น Object ครับ

!!! AOP ไม่ได้มาแทนที่ OOP นะครับ !!! 

หลายคนที่อ่านมาถงตรงนี้อาจจะงงกัน มองง่ายๆว่าเป็นส่วนเสริมของ OOP ครับ เพราะ OOP เนี่ย ถ้าเรานำมา Implement พัฒนาระบบ ระบบหนึ่ง มันมีเรื่องที่เราต้องสนใจมากมาย ไม่ได้สนใจแต่ตัว Business เพียงอย่างเดียวนะครับ อาทิ เช่น เรื่อง Security และ Log เป็นต้นนะครับ

ตัวอย่าง เช่น การที่เราสร้าง Class หนึ่งขึ้นมา มีหน้าที่ในการตัดจ่ายสินค้าในโกดังนะครับ โดยหน้าที่ของ Class มีหน้าที่คร่าว ดังนี้

  • ตัดจ่ายสินค้า
  • ตรวจสอบสินค้าคงเหลือ
  • บันทึก Log การทำงาน
  • ตรวจสอบสิทธิการใช้งาน

จากตัวอย่างข้างต้น สิ่งที่ Class นี้ความมีจริงๆ ควรเป็นสิ่งที่อธิบายในเรื่องของ Business ครับ พวกตัดจ่ายสินค้า, ดูยอดคงเหลือ ส่วนเรื่องบันทึก Log (ตัดออกได้ แต่พอโปรแกรมมีปัญหานี่ ยาวเลยนะกว่าจะ Tracking ได้ และตรวจสอบสิทธินั้นไม่จำเป็น แต่ก็เอาออกไม่ได้ 555 ซึ่งก็แล้วแต่การเก็บ Requirement และการออกแบบระบบ ไอ้สองส่วนหลังเนี่ยแหละ มันคือ Cross cutting concern เรียกแบบที่ผมเข้าใจนะ มัน คือ สิ่งที่เราต้องสนใจ แต่มันเกี่ยวพันกับสิ่งในสิ่งที่เราสนใจจริงๆ

ลองมาดูที่ Code กับมันมีส่วนของ Business กับส่วนที่เราต้องสนใจเพิ่มลงไป (พวก Log, Security เป็นต้น) ถ้าเราเพิ่ม Code ลงไปมันทำให้ Code ไม่ Clean (มีของแถม นอกจากสิ่งที่เราสนใจจริง คือ Business) และยากแก่การ Refactor หรือเตะขึ้นไปเป็น Super Class (บางครั้งเตะขึ้นไปได้ แต่เจ้า Class ใหม่ มันมีหน้าที่เพิ่มขึ้นมา นอกจากหน้าที่จริงๆของมัน) โดย AOP จะดึงสิ่งที่เราสนใจ แต่ละจุด (Aspects) ออกมาจาก Core (พวก Log, Security เป็นต้น) แล้วหาจุดเชื่อมโยง (่Joint) เพื่อยัดกลับเข้าไปตอนที่เราต้องการใช้งานมันจริงๆครับ

ตัวอย่าง

  • Java Spring Framework รู้ว่ามี ได้ใช้ ได้ประโยชน์กับมัน แต่ไม่เคยไปแตะกับมัน 5555
  • .Net Castle Project หรือเจ้า Castle.Core

Reference


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts to your email.