תכנון פונקציה: האם לשים פרמטרים מרובים או מערך
-
לא זה ולא זה.
הדרך הנכונה היא ליצור אובייקט שמכיל את כל השדות ולהעביר אותו לפונקציה.
כך 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; } }
לעתים זו אכן הדרך הכי נוחה. אך אם הפונקציה מכילה לוגיקה עסקית שעשוייה להשתנות עם הזמן, במקרה כזה הנכון בעיני להפריד את הפונקציה מהנתונים, ולמקם אותה במחלקה אחרת שאחראית על הלוגיקה העסקית.
-
@OdedDvir לא בהכרח התכוונתי לזה, כתבתי ש"הפונקציה היא בד"כ חלק מאחת הישויות".
החלוקה שלך בין מקרה שככה נח למקרה שבה יש חלוקת בין לוגיקה לנתונים היא מצויינת וככה אני עושה לרוב, אבל היא לא עולה בקנה אחד עם עקרונות הOOP, שלפיהם פונקציה היא תמיד פעולה של ישות, למשל חישוב מחיר זה פעולה או של המוצר או של החשבונית, או של ישות של פריט בחשבונית.