332. Don't reinvent the wheel

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

עם זאת, זה לא אומר שצריך להמציא את הגלגל מחדש. למה הכוונה?

נניח שאנחנו מעוניינים שהממשק שלנו יחשוף פונקציות שמאפשרות את כל היכולות הבאות:

  • הוספת תלמיד
  • הסרת תלמיד
  • בדיקה האם תלמיד נמצא
  • אפשרות לקבל את כל התלמידים

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

לכן אם אנחנו רוצים את כל הפונקציונאליות הזאת, כנראה מתאים שהממשק שלנו יכיל או יממש ICollection. כמובן, אם אנחנו רוצים פונקציונאליות יותר מנוונת (למשל רק הוספת תלמיד ואפשרות לקבל את כל התלמידים), יכול להיות שיותר מתאים ליצור פונקציות מתאימות בממשק שלנו (ולא לרשת משום דבר).

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

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

סוף שבוע לא מומצא מחדש טוב.

שתף