Re: [讨论] 重构跟kpi的考量

楼主: leo5916267 (小叶)   2022-02-27 00:32:59
※ 引述《VScode (VSisBestIDEinTheWorld)》之铭言:
: 假设以下情境
: 有个功能A、B都会用到相同逻辑,且有两份重复的code
: (没有unit test保护,而且年久失修 要加入unit test会需要更多时程)
: 现在要加入C,也会用到相同逻辑
: 身为合格的工程师 应该会把ABC重复的部份提取出来
: 而不是让这逻辑重复三次
: 但以公司营运的角度来看 这次专案就只会测试C的部份
: 不应该动到A、B
: 这时就要冒着A、B坏掉风险重构,或是因为来不及加入unit test
: 就干脆让相同逻辑存在三个地方
: 身为专业工程师,我很想选择重构
: 但过去的经验告诉我
: 绝对要以kpi为最优先考量
: 于是程式充满了注解、重复片段
: 虽然靠着笔记、git log,能还原当时写code的思路
: 但这些脏code就会永远留存在程式里
: 想问大家遇到这情况会怎么做?
我觉得有个盲点就是 重复程式码的逻辑
我的经验是在需求还没稳定前
一样的程式码复制到不同地方才是最佳解
你根本不知道什么时候 某个地方要用的逻辑不同 一但要改写的逻辑不通
你就会被共用的程式码卡住
就如你提到的案例 你只能砍掉重写
不然你就要很痛苦的把问题解决这时你就会写出 共用的难以维护的程式码 ,这反而比重复程式码还糟糕,看了很痛苦要改还要花大量时间 测试哪边会坏掉
另一种方式就是 C 不要共用的程式码 独立写一份
之后找时间把 共用程式码放回AB
你这样反而会干净很多 通常能拆出去的程式码是无属性的
不然只是目前刚好有一样的逻辑 而不是可以共用的程式码
作者: Gaitz (喵喵喵)   2022-02-27 01:10:00
这么说来你们会在所谓的需求稳定后,停下来大规模的重写重构改好架构?还是最后根本没有时间而且又要开发新需求,然后说需求没有稳定?永远没有做好?有新需求会被共用的地方卡住这件事听起来很奇怪,觉得单一责任原则没有做好。
作者: accessdenied (存取违规)   2022-02-27 01:16:00
不赞成。初期就这样做,只会遗留一大堆90%相似只有10%客制的程式码,然后未来修改,只敢全文搜索 findreplace而且,一旦分开管理,我保证没人有勇气统整回来
作者: xenorock (KingMorris)   2022-02-27 01:27:00
我看法同楼上,没有先Design好,分割完全,全部搞在一起后面有的痛苦
作者: t64141 (榕树)   2022-02-27 01:33:00
初期到处贴你要有把握后期能整理,不然后面维护的人就会变下一个原原po,很容易恶性循环的至于被共用卡住的问题,遇到特例难以扩充再另外实作就好,维护时因为特例而重复比初期就到处贴的副作用小多了
作者: MyNion (Nion Lee)   2022-02-27 02:23:00
我觉得你会被卡住,就代表一开始方法&功能就没拆好了将程式模组化,增添弹性的接口供外部呼叫如果这样还不行,那就代表从一开始这两者就毫无相同之处本来就要分开写了
作者: TakiDog (多奇狗)   2022-02-27 02:39:00
程式码要增加很容易,要减少太难,那为何一开始不规划好
作者: labbat (labbat)   2022-02-27 03:06:00
本来只要做加法函数,结果做成通用算数函数不如一开始就设计通用算数函数 改坏了也只是大家一起坏掉
作者: geroge0820 (可.....可恶)   2022-02-27 03:14:00
推文完全文不对题... 重点是需求还不稳定这件事吧
作者: wulouise (在线上!=在电脑前)   2022-02-27 09:40:00
可以共用的code怎么可能会大到需求改变就一堆特例通常都是srp没处理好才在怕改A错B
作者: handsomeLin (DoGLin)   2022-02-27 11:28:00
如果会有发现重复code然后还复制贴上的话就是design不行
作者: kkes0001 (kkes0308)   2022-02-27 11:48:00
绝对不要这样做
作者: foreverk (文艺青年)   2022-02-27 13:42:00
会被共用程式码卡住,就代表没抽干净,应该要去厘清逻辑,而不是跑去贴一堆重复code然后事后才要处理吧,本末倒置会觉得要花大量时间测试,就代表一开始你就没有写好unit test
作者: srwhite (鲁蛇阿白)   2022-02-27 13:50:00
反了吧应该先写一起等真的有不同要复制再复制啊
作者: t64141 (榕树)   2022-02-27 14:46:00
需求不稳定不是重点,一开始到处复制,需求变化过程要改就已经需要到处翻找了,即使等需求确定后也是要面临重构的问题,万一届时已经上线更悲剧
作者: neo5277 (I am an agent of chaos)   2022-02-27 15:17:00
这篇是用接案公司的想法出发写MVP的时候吧?
作者: viper9709 (阿达)   2022-02-28 00:08:00
对系统还不够了解时,这才是比较实用的+1
作者: Nonsense8 (胡说)   2022-02-28 10:19:00
楼主没说错,这适用于未上线的专案,如果老板在开发中要求大改,主管有责任争取上线后重构时间。甚至需求大改也不是老板的责任,尤其市场上没有其他竞品可以参考时,才会不时在开发中更改需求但原文的情境应该是上线后营运很久的专案,就不适合这种作法了

Links booklink

Contact Us: admin [ a t ] ucptt.com