358. Implementing an interception framework - Aspect oriented programming

בהמשך לפעם הקודמת,

ראינו מה היינו מצפים בערך מFramework של Interception. כעת נדבר על Framework מעט יותר ספציפי, מה שנקרא גם הרבה פעמים “Aspect Oriented Programming” – מעתה ועד אילך (עד סוף הטיפ) יקרא AOP (עם כי לפעמים מתייחסים בAOP לרעיון הכללי של Interception ולאו דווקא למה שאציג כעת)

תזכורת:

יש לנו פעולות שאנחנו מעוניינים לעשות בפונקציות מסוימות שלנו, ביניהן:

  • כתיבה ללוג
  • Profiling
  • וואלידאציה
  • נראה בהמשך עוד

הבעיה היא שכתיבת הקוד בצורה מפורשת בפונקציות שלנו, גורמת לפונקציות להתנפח מאוד. בנוסף, קיימת בעיה של טעות במימוש ידני של קוד שחוזר על עצמו.

הפתרון: הקונספט של Interception המאפשר לנו להזריק התנהגויות אלה לפונקציות שלנו באיזושהי צורה, מבלי לפגוע בפונקציות עצמן.

אז מה זה AOP בכלל?

AOP היא פרדיגמת תכנות (כמו OOP, תכנות פרוצדורלי, תכנות פונקציונאלי, SOA וכו’) שמטרתה למנוע להגדיל את המודולריות של הקוד על ידי הפרדת ההתנהגות של הפונקציה מ”ההתעסקות במסביב”.

תכלס, מה שבד”כ זה אומר זה שאת “ההתעסקות במסביב” נוציא למחלקות נפרדות, שנקראות גם Aspectים או Interceptorים ואותן נרכיב על הפונקציות שלנו.

איך נרכיב אותן על הפונקציות שלנו? למשל בתור Attributeים!

לדוגמה, נניח שאנחנו רוצים שהפונקציה שלנו תכתוב לLog ותבצע וואלידאציה, נגדיר זאת בצורה דקלרטיבית, למשל:

1
2
3
4
5
6
[Log]
[Validate]
public void Deposit([NotNull]string id, [IsPositive]int amount)
{
// ...
}

עצם העובדה שקישטנו את הפונקציה שלנו עם הAspectים (הAttributeים) המתאימים גורמת לכך שהפונקציה שלנו משנה את התנהגותה ותבצע את הפעולות שאנחנו רוצים.

שימו לב שזה מתקשר איכשהו לטיפ הקודם: אם בטיפ הקודם הצגנו את הרעיון המרכזי של Interception Framework, שאנחנו רוצים שיהיה איזשהו ממשק שממנו ירשו Interceptorים ויוכלו להתלבש על פונקציות, כאן הAttributeים האלה יממשו את הממשק הזה.

בהמשך נדבר על הדרכים שאפשר לממש Interception framework, ונתייחס לAOP גם.

אחרי זה נחזור לראות עוד כמה דוגמאות על Interception.

ואחרי זה אין לי מושג.

המשך יום עם אספקטים מעולים.

שתף