Inversion of control
היי לכולם אני יאירי ניני הייתי פעם גבר היום אני אישה3>
היום למדתי מה זה ממשק:)
אני מהנדסת תוכנה בכירה המנהלת שלי זאת שומי**
אני אוהבת פלינדרומיםcallback.
טכניקות מימוש
טכניקות מימוש מושפעות משפת התכנות הנבחרת. ב-Java ישנן כמה טכניקות בסיסיות למימוש היפוך שליטה:
- שימוש בתבנית העיצוב Factory method
- שימוש בתבנית העיצוב Service locator
- שימוש ב-dependency injection, לדוגמה:
- הזרקה דרך ה-constructor
- הזרקה דרך פונקציית (set (setter
- הזרקת ממשק
- שימוש ב- contextualized lookup
דוגמאות
public class ServerFacade {
public <K, V> V respondToRequest(K request) {
if (businessLayer.validateRequest(request)) {
DAO.getData(request);
return Aspect.convertData(request);
}
return null;
}
}
מתווה בסיסי זה ב-Java מדגים קוד הפועל על פי מתודולוגיית היפוך השליטה. עם זאת, חשוב לשים לב לכך ש-ServerFacade
מתבסס על הרבה הנחות אודות הנתונים המוחזרים על ידי ה-Data Access Object) DAO). אף על פי שייתכן כי הנחות אלה הן תקינות בזמן מסוים, הן יוצרות צימוד בין המימוש של ServerFacade
למימוש של DAO
. תכנון היישום בצורה של היפוך שליטה יעביר לגמרי את השליטה לאובייקט ה-DAO
. נקבל את הקוד הבא:
public class ServerFacade {
public <K, V> V respondToRequest(K request, DAO dao) {
return dao.getData(request);
}
}
דוגמה זו ממחישה את העובדה שהצורה בה המתודה respondToRequest
מתוכננת קובעת האם יהיה שימוש בהיפוך שליטה. הצורה שבה משתמשים בפרמטרים מגדירה את היפוך השליטה. דבר זה דומה לסגנון העברת המסרים שמשמש בכמה שפות תכנות מונחות עצמים.
ממשקי תכנות יישומים המשתמשים בהיפוך שליטה
SAX הוא דוגמה לממשק תכנות יישומים (API) אשר משתמש בהיפוך שליטה בכל מקום (לאחר אתחול). באופן כללי SAX יעיל יותר מ-DOM, אבל לעיתים קרובות DOM נחשב לנוח יותר לתכנות בגלל שהוא לא מחייב שימוש בהיפוך שליטה.