[問題] 實作內容相同但很可能改變的function

看板C_Sharp作者 (大魯蛇)時間10年前發表 (2014/08/20 08:03), 10年前編輯推噓0(0012)
留言12則, 4人參與, 最新討論串1/2 (看更多)
大家好,我就直接舉例了 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://www.ptt.cc/bbs/C_Sharp/M.1408521782.A.36A.html

08/20 16:28, , 1F
請用繼承, 不要用 switch
08/20 16:28, 1F
原本想用繼承,可是這些計算公式,是只有當中有一些不同, EX 計算公式1.. 計算公式專屬a的部分 計算公式2.. 專屬部分在每個狀況會有不同, 可是現在就算我計算公式1和2當讓大家共用, 又遇到另一個問題,就是未來a的計算公式1可能會變的不同, 這樣共用的部分就不行了,等於要獨立抽出來, 這種情況又該如何呢?

08/20 16:35, , 2F
應該把 method 中類似的東西抽出, 成為獨立的 method
08/20 16:35, 2F

08/20 16:36, , 3F
視這些所謂"差不多,但不同"的片段, 彼此間的關係
08/20 16:36, 3F

08/20 16:39, , 4F
去決定要用 switch, Func<>, 或根本不該綁在一起
08/20 16:39, 4F

08/20 16:40, , 5F
不同類的東西,硬要塞個switch,只會造成程式邏輯混亂
08/20 16:40, 5F

08/20 16:41, , 6F
可以從這個方面去想:你要做的事情符不符合method名字?
08/20 16:41, 6F

08/20 16:41, , 7F
method的名字是否足以描述裡面要做的事情.
08/20 16:41, 7F
※ 編輯: BigLoser (114.33.27.60), 08/20/2014 19:06:59 ※ 編輯: BigLoser (114.33.27.60), 08/20/2014 19:10:59

08/20 20:31, , 8F
要不要合併不是只看實作內容,要看代表的邏輯和用途
08/20 20:31, 8F

08/20 20:35, , 9F
你的舉例來說,你後面的問題來了根本不是個問題
08/20 20:35, 9F

08/20 20:37, , 10F
作法改了當然就呼叫新的function,跟原本的關係在哪?
08/20 20:37, 10F

08/20 21:06, , 11F
公式大部分是共用的 只有一小部分不同
08/20 21:06, 11F

08/20 21:06, , 12F
*相同
08/20 21:06, 12F
文章代碼(AID): #1Jz5OsDg (C_Sharp)
文章代碼(AID): #1Jz5OsDg (C_Sharp)