מה תכלס ההבדל בין dependency injection לreflection

LiorSaban

New member
מה תכלס ההבדל בין dependency injection לreflection

לבין factory
אשמח לקצת סדר ...
 

rondadon1985

New member
אתה מערבב 2 דברים שונים למיטב ידיעתי

לא מכיר מספיק Reflection בשביל להסביר מה זה, אבל לא ידוע לי שזה Design Pattern, בעוד ה-2 האחרים שהזכרת הם Design Patterns.
&nbsp
Dependency Injection - זו תבנית תכן שמטרתה להפחית צימוד של מחלקות ולאפשר בדיקות יחידה בקלות.
למשל אם יש לנו מחלקה A שעושה שימוש בפונקציות של מחלקה B בתוכה. אפשרות אחת היא לעשות את הפונקציות הנ"ל סטטיות, אבל זה יקשה על בדיקות יחידה, אפשרות שנייה היא ליצור מופע של המחלקה B בתוך מחלקה A, אבל זה יוצר צימוד בין המחלקות. אפשרות שלישית היא "להזריק" מופע קיים של מחלקה B לתוך מחלקה A (דרך בנאי לרוב, או דרך מתודה יעודית), ואז לעשות שימוש במופע הקיים. זה מקטין את הצימוד בינהן, ומאפשר לך בזמן בדיקה לדוגמה, להזריק אובייקט דמה של מחלקה B.
תחשוב למשל שמחלקה B אמורה לקרוא מידע מהDB, ובבדיקות אתה מעוניין לבדוק את מחלקה A שעושה שימוש במידע הזה, ולא מעניין אותך הבדיקה של ה-DB עצמו. אתה יכול ליצור מופע דמה של מחלקה B עם נתונים כלשהם (למשל ליצור מחלקה C שיורשת את B ושכתב את הפונקציות שפשוט יחזירו מערכים קבועים), ולהזריק אותו בבדיקה.
&nbsp
FACTORY - זה גם תבנית תכן, שבגדול אומרת שאתה מבקש מחלקה כלשהי לפי פרמטר, והFACTORY אחראי להחזיר לך את המחלקה הנכונה לאחר שהוא איתחל אותה וכו. (קצר בזמן כרגע אז לא יכול להרחיב יותר)
 

ziv1f

New member
ריפלקשן זה היכולת לשקף בזמן ריצה את מבנה הקוד

איך עושים את זה? ע"י שימוש בקלאסים פרופרטים ומתודות שמיועדים לזה, והם נמצאים (בעיקר) בניימספייס System.Reflection, אבל זה למעשה מובנה לתוך סביבת העבודה, ככה שאתה יכול גם לגבי משתנה מסויים שאתה עובד איתו, לקבל את ה-Type שלו (ע"י שימוש במתודה GetType שכל הקלאסים יורשים מ-object) ומתוך זה, אתה יכול לדעת באיזה אסמבלי הוא נמצא, מאיזה קלאס הוא באמת (אם יש לך למשל מופע של ISomeInterfaceImplementation אז אתה יכול לדעת מי הקלאס שלמעשה מממש את האינטרפייס הזה) איזה מתודות יש לו (כולל פרוטקטד ופרייבט), וכמובן גם לקרוא למתודות האלה.
מה שזה מאפשר זה לגשת לדברים באובייקט, בזמן ריצה, שאין לך מושג בזמן הקומפילציה מה הם יהיו.

הזרקת תלויות (dependency Injection שקרוי בקיצור DI) זה design pattern מסוג creational כלומר הוא נוגע בתחום של יצירת האובייקטים, ועיקר השיטה הוא שמייצרים קונטיינר, שהוא האחראי על יצירת האובייקטים, ובקונסטרקטור (אם בעזרת אטריביוטים על פרופרטים) מגדירים איזה תלויות יש לאובייקט מסויים שצריך לספק אותן, ולמעשה בתחילת ריצת התוכנית מגדירים לקונטיינר איך לספק כל תלות (למשל תלות מסויימת תהיה shared כלומר מעין סינגלטון, תלות אחרת נספק כאובייקט שתלוי בסשן, תלות אחרת תסופק בהתאם לסוג האובייקט שיוצרים, וכן הלאה).
במימושים שונים שקיימים בשוק של DI, מעצם ההגדרה של איך הוא עובד, לרוב משתמשים ב-reflection, אבל זה רק מטעמי נוחות וזה לא הכרח ואין למעשה קשר בין השניים

בברכה,
זיו
 
למעלה