作者uranusjr (←这人是超级笨蛋)
看板C_Sharp
标题Re: [问题] 实作内容相同但很可能改变的function
时间Wed Aug 20 21:33:50 2014
※ 引述《BigLoser (大鲁蛇)》之铭言:
1F:→ uranusjr: 请用继承, 不要用 switch 08/20 16:28
: 原本想用继承,可是这些计算公式,是只有当中有一些不同,
: 专属部分在每个状况会有不同,
: 可是现在就算我计算公式1和2当让大家共用,
: 又遇到另一个问题,就是未来a的计算公式1可能会变的不同,
: 这样共用的部分就不行了,等於要独立抽出来,
: 这种情况又该如何呢?
2F:→ ssccg: 要不要合并不是只看实作内容,要看代表的逻辑和用途 08/20 20:31
3F:→ ssccg: 你的举例来说,你後面的问题来了根本不是个问题 08/20 20:35
4F:→ ssccg: 作法改了当然就呼叫新的function,跟原本的关系在哪? 08/20 20:37
5F:→ BigLoser: 公式大部分是共用的 只有一小部分不同 08/20 21:06
6F:→ BigLoser: *相同 08/20 21:06
我觉得你已经在钻牛角尖了
没有人规定程式里不能有同样的东西
一般会建议把相同的地方 extract 出来, 是因为这些东西是共用的
当你需要修改共用逻辑时, 只要修改 extract 出来的部分即可
这样可以降低维护成本, 以及避免修改时发生错误
如果别人(或未来的你)需要阅读你的程式, 也可以让他们比较方便
但是即使两个东西长得一样, 不代表它们的逻辑就是共用的
以你的状况而言, 既然「未来a的计算公式1可能会变的不同」
那麽就代表 a 与 b 根本就不是同一个东西, 只是刚好都用了计算公式 1
所以要嘛你还是把计算公式 1 抽出, 然後当 a 未来改变时改使用其他公式实作
要嘛就是你一开始就根本不应该把 a 和 b 看成同一类东西
Method extraction 这件事情本身就是用来降低维护与程式阅读成本
所以当你在思考要不要, 以及要怎麽做时, 就应该把这两件事当成目标
如果一味遵从教条, 为 refactor 而 refactor, 这些准则就失去意义了
--
7F:→ GNUGCC:void main(void) 的写法是可行的唷^^08/10 00:59
8F:→ GNUGCC:虽然这个写法较传统,但是语法与文法都正确哦^^08/10 02:16
9F:→ GNUGCC:目前我使用的 Visual C++ 都接受 void main(void) 与 08/10 20:18
10F:→ GNUGCC:int main(void),各位可以把 C++ 专案改成原生 C++ 类型来 08/10 20:19
11F:→ GNUGCC:用 void main(void) 来写发现也可通过编译. 08/10 20:21
12F:→ GNUGCC:这个就是 Visual C++ 的弹性.08/11 20:23
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 218.161.94.175
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1408541632.A.702.html
13F:推 BigLoser: 好的,先谢谢你的回应,我需要消化和思考一下 08/20 22:59
14F:推 BigLoser: 还在学习怎麽让程式更物件导向,再谢谢你一次 08/20 23:04