作者BigLoser (大魯蛇)
看板C_Sharp
標題[問題] 實作內容相同但很可能改變的function
時間Wed Aug 20 16:03:00 2014
大家好,我就直接舉例了
public int CountA(int A)
{
return A*5 + 0;
}
public int CountB(int B)
{
return B*5 +1;
}
public int CountC(int C)
{
return C*5 +2;
}
我有多個function做的事情是差不多的,只有些微差別,
如例子中的 +0 +1 +2,
所以我可以把它整合成一個function,用switch來判斷他要+多少,
可是問題來了,如果未來這些function可能又會出一些特別的變化,
例如
public int CountA(int A)
{
return A*A*A+A+1;
}
會使得A不適合跟其他人整合成在一起,
請問這種狀況該怎麼處理比較好呢?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.249.104.106
※ 文章網址: http://webptt.com/m.aspx?n=bbs/C_Sharp/M.1408521782.A.36A.html
1F:→ uranusjr: 請用繼承, 不要用 switch 08/20 16:28
原本想用繼承,可是這些計算公式,是只有當中有一些不同,
EX
計算公式1..
計算公式專屬a的部分
計算公式2..
專屬部分在每個狀況會有不同,
可是現在就算我計算公式1和2當讓大家共用,
又遇到另一個問題,就是未來a的計算公式1可能會變的不同,
這樣共用的部分就不行了,等於要獨立抽出來,
這種情況又該如何呢?
2F:→ iterator: 應該把 method 中類似的東西抽出, 成為獨立的 method 08/20 16:35
3F:→ iterator: 視這些所謂"差不多,但不同"的片段, 彼此間的關係 08/20 16:36
4F:→ iterator: 去決定要用 switch, Func<>, 或根本不該綁在一起 08/20 16:39
5F:→ iterator: 不同類的東西,硬要塞個switch,只會造成程式邏輯混亂 08/20 16:40
6F:→ iterator: 可以從這個方面去想:你要做的事情符不符合method名字? 08/20 16:41
7F:→ iterator: method的名字是否足以描述裡面要做的事情. 08/20 16:41
※ 編輯: BigLoser (114.33.27.60), 08/20/2014 19:06:59
※ 編輯: BigLoser (114.33.27.60), 08/20/2014 19:10:59
8F:→ ssccg: 要不要合併不是只看實作內容,要看代表的邏輯和用途 08/20 20:31
9F:→ ssccg: 你的舉例來說,你後面的問題來了根本不是個問題 08/20 20:35
10F:→ ssccg: 作法改了當然就呼叫新的function,跟原本的關係在哪? 08/20 20:37
11F:→ BigLoser: 公式大部分是共用的 只有一小部分不同 08/20 21:06
12F:→ BigLoser: *相同 08/20 21:06