עבודה עם Legacy Code – חלק שני: הזרקת תלויות / Dependencies Injection

עבודה עם Legacy Code – חלק שני: הזרקת תלויות / Dependencies Injection

בפוסט הקודם בסדרה כתבתי על הצורך בבדיקות.

בפוסט הזה נדבר על הסיבה העיקרית בגלל אנשים לא כותבים בדיקות בקוד לגסי – תלוית – dependencies.

גם כשכבר יש רצון והסכמה לכתוב בדיקות פותחים את הקוד ואומרים "תראה: הפונקציה מקבלת מלא משתנים, וחוץ מזה, היא כוללת פניות ל APIs וקריאה מה database ועוד כל מני דברים מעצבנים. אז איך אפשר לכתוב בדיקות ככה?"

נכון, זה באמת קשה ומבאס. אבל יש מה לעשות.

בפוסט הראשון כתבתי על זה שצריך למצוא נקודה בקוד (pinch point) שהיא אופטימלית לבדיקות. אחד השיקולים הוא גם תלויות. אז נחפש מקום עם פחות תלויות. אבל בכל מקרה תהינה לנו תלויות שנצטרך לטפל בהן.

הטיפול בתלויות הוא די פשוט אבל כרוך בעבודה תשתית מסוימת. צריך לשנות את הקוד כך שיקבל את התלויות מבחוץ. Michael Feathers כתב על זה ספר שלם – מומלץ. אם למשל הפונקציה משתמשת במתודה סטטית שקוראת לאיזה API, נעטוף את המתודה ב Interface חדש ונעביר אותו כפרמטר למתודה. כשנכתוב בדיקות, נשתמש ב mock object או שנייצר class מיוחד לבדיקות (שמיישם את ה Interface) שייתן למתודה מה שנרצה.

אם למשל המתודה שלנו משתמשת במתודה אחרת ב class , נוכל לרשת את ה class שלנו ל class של בדיקות בו נעשה override על המתודה כדי שתיתן לנו מה שנרצה. ויש עוד שיטות.

הרעיון המרכזי הוא שלא משנים קוד בלי בדיקות. ובשביל בדיקות צריך קצת לעבוד. אבל זה עניין של תרגול. כשאני התחלתי לעבוד TDD זה היה נראה לי נוראי אבל אחרי שהתרגלתי אני לא מבין איך אפשר בלי. אחרי שאתה מתרגל לעבוד עם רשת בטחון של בדיקות אתה פשוט לא יכול בלי. אז בכל מקום שעושים שינוי כותבים מה שצריך בשביל הבדיקות. ובעוד מקום. ובעוד מקום. ואז יום אחד אתם מגיעים למקום שמישהו כבר עטף בבדיקות. איזה כיף!

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

Kent Beck שהמציא את TDD (ועוד הרבה דברים טובים) אמר: לפעמים מאשימים אותי שאני דתי בגישה שלי לבדיקות, אבל אני לא צריך להתפלל כשאני עושה check-in לקוד.

בפוסט הבא אני רוצה לכתוב על התוצאה העיקרית של השיטה הזו: refactored code. קוד שכתוב היטב.

למי שרוצה הזדמנות ללמוד יותר על זה ולתרגל, מוזמנים לקרוא על הסדנא שלנו בנושא הזה.

כתיבת תגובה

סגירת תפריט