[נכתב ע”י גיא דוברובסקי]
בוקר טוב,
בשבועות האחרונים פגשתי את זלינגר הגבר אשר קצת סיפר לי הפורום ועל חבלי הלידה בכתיבת כל טיפ יומי.
החלטתי לעזור קצת לזלינגר ולתרום את חלקי לפורום בדמות הופעת אורח.
אתם מוזמנים לשלוח גם טיפים יומיים כדי שנעשה את הפורום הזה פעיל ופורה יותר – for us by us.
ובכן, אחרי ההקדמה הקצרה,
הטיפ היומי הוא בנושא DebuggerTypeProxy.
מה זה ולמה זה טוב?
קרה לכם פעם שדיבגתם אוביקטים של טיפוסים מורכבים?
כנראה שכן אחרת לא הייתם מנויים על הטיפ היומי.
קרה לכם שבשביל להגיע לפיסת המידע שאתם מחפשים, הייתם צריכים לחפור עמוק בתוך האוביקט?
לי זה קרה המון פעמים, ויותר מזה, אני תמיד מחפש את אותה פיסת המידע.
קרה לכם שבעת דיבוג הופיע לכם מלא זבל שלא באמת מעניין אותכם?
לי קרה שמרוב זבל לא מצאתי את מה שאני באמת מחפש..
אם התשובות שלכם היו חיוביות לשאלות הנ”ל, תמצאו את הטיפ הזה מועיל מאוד:
DebuggerTypeProxy הינו attribute אשר מגדיר איך יראה האוביקט בזמן דיבאג.
נרצה להשתמש בו כאשר רוצים לדבג אוביקט מורכב ו:
- פריטי המידע הרלוונטיים לא נוחים לגישה
- רוצים להחביא פריטי מידע לא רלונטיים
טוב מראה עיניים ממשמע אוזניים:
יש לנו את הטיפוס Student (כאשר מה שיעניין אותנו בו בזמן דיבאג הוא רק השם שלו והציונים):
|
|
ניצור instance של Student ונראה ונסתכל עליו בדיבאג:
|
|
בעיות:
- לא רואים את הציונים – בשביל לראות אותם צריך לפתוח Grades ולהתסכל על כל פריט במילון
- הצפה במידע לא מעניין – בזמן דיבאג אני יודע שיש פריטים שאני לא רוצה לראות.
נפתור זאת ע"י יצירית DebuggerTypeProxy:
|
|
במחלקה זאת אנחנו פותרים את הבעיות לעיל ע"י:
- הגדרת אופן תצוגת הציונים - בחרתי לשרשר אותם
- חשיפת רק פריטי המידע הרלונטיים: בחרתי לא להציג את:
- UnImportantDetail
- AnotherBoringFact
הפעלת ה attribute שיצרנו תהיה באופן הבא:
|
|
וכעת בעת דיבוג של אוביקט מטיפוס Student, הוא יראה לנו בצורה הבאה:
כמובן שנוכל תמיד לראות את האוביקט המקורי ע"י בחירת Raw View:
דיבוג יעיל.