תכנון מתודה

rabashani

New member
תכנון מתודה

bool CheckMe (userId, action) { // check if user has privileges to perform action // return true - if privileged, else - return false. return isPrivileged; }​
המתודה די פשוטה, מקבלת מזהה למשתמש (string) פעולה ומחזירה true/false אם מורשה או לא. מזהה המשתמש הינו string המורכב מאות + 4 ספרות. למשל: X1234. אם כי לעיתים ראיתי שמתשמשים במתודה הנ"ל עם כל מיני extensions שמייצגים את סוג המשב שהפעיל ... למשל: Unix/X1234 . השאלה שלי היא כזאת: התעוררה מחלוקת: 1) על המתודה (שהיא יודעת מה הפורמט הרצוי) להוציא מה-string את הטקסט הרלוונטי או אם לא ניתן - אזי לפחות לזרוק שגיאה ברורה. 2) לא לעשות כלום - מי שמשתמש במתודה - יידע להפעיל אותה בצורה נכונה - והוא זה שיקצץ עבורי. מה דעתכם? מה הייתם בוחרים? האם יש מאמרים בנושאים כאלו? נ.ב. קראתי משהו שמדבר על design by contract וזה תכל'ס תומך בפתרון הראשון - מכירים ? מה דעתכם? תודה רבה. ------------ לבלוג שלי בנושא dotNet: http://www.human-debugger.net/
 

ייוניי

New member
נראה לי שהייתי הולך על 1

ולו מהסיבה הפשוטה שאני רוצה להשאיר את הידיעה על המבנה של ה userid במקום אחד ולא לפזר אותה לכל עבר בעזרת שיטה 2. לגבי השגיאה אני מניח שגם ככה אם המבנה לא מתאים נזרקת שגיאה, לא? אני מניח שאפשר גם פשוט להחזיר false בלי לזרוק שגיאה אם רוצים להיות מאובטחים אך עדינים. ככה גם אפשר יהיה לשנות בקלות את מבנה ה userid (אולי בעתיד יכלול גם את ה extension) בלי לגעת בקוד מחוץ למתודה. אגב, ה contract שהמתודה הזו מציגה הוא בעצם החתימה שלה ושם אין אזכור לגבי החוקיות של ה userid כך שעל פי design by contract אסור לדרוש מהקוד שקורא לה לדעת יותר מאשר שמדובר ב string...
 

rabashani

New member
מסכים לחלוטין

כל מה שאמרת מייצג לחלוטין את דעתי. לבסוף הלכנו גם על הדרך הזו - אחרי ויכוחים קשים (וקצת עץ או פלי, סתם...) אם כי, הוויכוח התעורר עקב כך שחברי לצוות אמר שאין מקום לזה כי הקורא למתודה יבין שלא צריך להיות כך... אני חושב תמיד על הקורא למתודה: 1) יכול להיות תוכניתן חדש 2) יכול להיות סתם תוכניתן גרוע 3) למה לאלץ אותו לזכור כל כך הרבה דברים או להכנס לקוד שלא שלו - בהרצה הראשונה יקבל שגיאה נורמלית שמתארת בדיוק מה עשה לא טוב. 4) מ-string לבד אי אפשר להסיק כל כך הרבה דברים 5) אכן - זה מרכז את השינויים העתידיים למקום אחד. * לדעתי לא מספיק טוב להחזיר false - אין לזה משמעות - עדיף שתעוף שגיאה שאומרת - יש לך טעות בשימוש! זו לא שגיאת ריצה טיפוסית, אני אוהב לקרוא לזה שגיאת פיתוח. בכל מקרה, תודה על התשובה. ----------- בואו לבקר אותי בבלוג שלי, בנושאי dotNet,architecture,design pattern ... http://www.human-debugger.net/
 
למעלה