DCSIMG
עמוד הבית| חבילות השירות שלנו| חומר חופשי| צור קשר
Don't - בלוג היועצים של מיקרוסופט ישראל

בלוג היועצים של מיקרוסופט ישראל

Don't

...היא  התשובה לשאלה הבאה שנשאלתי השבוע:

"מהי הדרך המומלצת ביותר לטפל ב- Exceptions ביישום שלי?"

זה אולי נשמע לא אינטואיטיבי ולא נכון, אבל האמת שלטעמי זו דרך הפעולה המועדפת. אלא אם כן יש סיבה טובה מאוד לעשות את זה - אל תטפלו ב- Exceptions. אל תמלאו את הקוד שלכם ב- Try...Catch לא נחוצים אל תתפסו כל סוג שגיאה שאתם חושבים שעלול להתעורר ביישום.

הסיבה לכך פשוטה מאוד - בהרבה מאוד מקרים, אין לנו מה לעשות עם ה- Exception חוץ מאשר לרשום אותו ללוג, ואת זה אפשר לעשות במקום מרכזי אחד. לא צריך לבצע את זה בכל פונקציה או Property.

בכלל, נראה לי שלעתים הטיפול ב- Exception נמצא בידיים הלא נכונות, והחשיבה הטיפוסית היא שזה משהו שתוכניתנים בלבד אחראים לו. אני טוען שטיפול בשגיאות ביישום הוא משהו שצריך לעבור גם דרך האחראים על האפיון, שצריכים לתת את הדעת לגבי אופן הפעולה הנדרש כאשר היישום נכשל. לדוגמה - מה אמור לקרות כאשר לא ניתן לגשת למקורות מידע מסויימים לשם שליפת מידע, אבל מקורות אחרים פועלים כראוי? האם היישום צריך "לעוף"? האם המשתמש צריך לקבל הודעה אבל להמשיך לעבוד כרגיל? אלו לא החלטות שתוכניתן צריך, ורשאי, להחליט. זו החלטה אפיונית טהורה.

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

מקור מצויין לתפיסה שכזו נמצא בקישור הבא:

http://msdn.microsoft.com/en-us/library/ms229014(VS.80).aspx

מומלץ לקרוא!

תוכן התגובה

Ariel Ben Horesh כתב/ה:

בעיקרון אני מסכים עם הגישה.

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

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

טוב קצת מתחרט שכתבתי את זה בעברית (שפה קשה :))

# November 23, 2008 12:09 AM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 7 and 5 and type the answer here:


Enter the numbers above: