נתחיל כעת לראות שימושים נחמדים בInterception.
השימושים שנראה הם בעיקר על מנת לנקות את הקוד שלנו מההתעסקות ב”מסביב” ולהשאיר בו את הלוגיקה שלו. (נדבר על הקונספט הזה עוד בהמשך, מה שנקרא גם Aspect Oriented Programming)
השימוש הראשון שנראה ואולי המתבקש ביותר הוא שימוש בInterception בשביל Logging:
כמו כל מערכת טובה, אנחנו מעוניינים לכתוב לLog את הפעולות הבאות:
- כאשר מתבצעת כניסה לפונקציה
- כאשר מתבצעת יציאה מפונקציה עם ערך ההחזר
- כאשר עף Exception
אם היינו רוצים לעשות את זה על כל פונקציה, כל פונקציה שלנו הייתה נראית כך:
|
|
שימו לב שהמתודה שלנו התנפחה ב7 שורות בערך מבלי שבכלל כתבנו את הלוגיקה שלה.
Interception נותן לנו פתרון יותר אלגנטי:
ניצור מתודה שאליה יכנסו כל הקריאות שלנו:
|
|
ואז נשנה אותה כך שתבצע את הפעולות שדיברנו עליהן:
|
|
מטורף! כעת רק צריך איכשהו "להתקין" את הInterception הזה על המחלקות שלנו וקיבלנו הרבה לוגים בחינם!
ראינו בעבר מספר דרכים לביצוע Intercept: שינוי קוד ועטיפת קוד בDesign Pattern של Decorator.
נראה בהמשך מספר דרכים יותר נוחות לביצוע Intercept, אבל מה שחשוב כרגע להבין את הקונספט ואת הכוח.
המשך יום עם לוגים טוב!
הערה: פונקציית עזר ששומשה בטיפ:
|
|