תכנון פונקציה: האם לשים פרמטרים מרובים או מערך
-
לא זה ולא זה.
הדרך הנכונה היא ליצור אובייקט שמכיל את כל השדות ולהעביר אותו לפונקציה.
כך C#:public record JobSpecifications { public string JobName {get; set;} public double WorkHours {get; set;} ... } public decimal CalculatePrice(JobSpecifications specs) { ... return price; }זה יעיל מכל הבחינות, והרבה יותר קל לתחזוקה.
-
ליתר ביאור, דוד התכוון שאפשר ליישם את הפונקציה כחלק מהאובייקט, כך:
public class Job { public string JobName {get; set;} public double WorkHours {get; set;} ... public decimal CalculatePrice() { ... return price; } }לעתים זו אכן הדרך הכי נוחה. אך אם הפונקציה מכילה לוגיקה עסקית שעשוייה להשתנות עם הזמן, במקרה כזה הנכון בעיני להפריד את הפונקציה מהנתונים, ולמקם אותה במחלקה אחרת שאחראית על הלוגיקה העסקית.
-
ליתר ביאור, דוד התכוון שאפשר ליישם את הפונקציה כחלק מהאובייקט, כך:
public class Job { public string JobName {get; set;} public double WorkHours {get; set;} ... public decimal CalculatePrice() { ... return price; } }לעתים זו אכן הדרך הכי נוחה. אך אם הפונקציה מכילה לוגיקה עסקית שעשוייה להשתנות עם הזמן, במקרה כזה הנכון בעיני להפריד את הפונקציה מהנתונים, ולמקם אותה במחלקה אחרת שאחראית על הלוגיקה העסקית.
@OdedDvir לא בהכרח התכוונתי לזה, כתבתי ש"הפונקציה היא בד"כ חלק מאחת הישויות".
החלוקה שלך בין מקרה שככה נח למקרה שבה יש חלוקת בין לוגיקה לנתונים היא מצויינת וככה אני עושה לרוב, אבל היא לא עולה בקנה אחד עם עקרונות הOOP, שלפיהם פונקציה היא תמיד פעולה של ישות, למשל חישוב מחיר זה פעולה או של המוצר או של החשבונית, או של ישות של פריט בחשבונית.
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות