作者TonyQ (得理饶人)
看板Soft_Job
标题Re: [请益] 这种情况要怎麽重构
时间Thu Jun 25 18:07:26 2020
※ 引述《vi000246 (Vi)》之铭言:
: 我现在遇到一个情况 同时跟其他人开发很相似的功能
: 举例来说 我跟B同时开发两个电商网站
: 一个叫博客来,一个叫虾皮好了
: B已经建好博客来商品列表页面
: 我也要建立虾皮的商品列表 想把B建的博客来页面拿来用
: 因为相似度很高,打算把页面共用的逻辑抽出来
: 放到common lib
: 但是这时B也在开发中
: 如果我重构博客来页面,他要把code merge回博客来时就要修很多冲突
: 这时我该做的是,直接复制博客来的逻辑,先把虾皮商品列表建出来
: 等两边网站都完成,再来重构吗?
: 因为现在程式成长幅度已经有点夸张了
: 单个档一千行程式码
: 我怕等两边都完成再重构,会花更多时间
: 现在就重构会造成merge冲突,而且两边开发进度也不一样
: 他写完的code我要用,就重构他的code
: 可能会重构到没完没了
: 遇到这种情况该怎麽办呢?
: 想问有比较好的方法吗
1. 你不应该去动别人开发中的 code, 除非 pair 或你是有被授权的人.
2. 你可以使用他的 code , 建 common, 但你不应该改回他的部分(理由1).
3. 假设改完会有冲突, 那表示你做的不是重构.
4. 如果完成再重构会花更多时间, 那表示你做的不是重构.
5. 你要用他的 code , 跟你要整理重构, 是两回事.
所以你要先搞清楚你要做的事情, 是解决你的事情,
还是帮别人改(你未必有取得授权的) code.
你拿别人的东西, 改成自己能用的 common lib,
用自己的 common lib, 这样基本上应该不至於被靠北.
但去动别人正在开发的东西, 说穿了, 你知道人家在干嘛吗?
你权责上能对人家时程负责吗?
或说穿了, 你可以负起 fix conflict 的责任吗?
另外有个版友说重构是农闲的事情,
其实重构是越忙的地方越需要, 因为会忙通常就是没在重构,
但是这篇原文讲得并不是重构,
而是在僭越职责的前提底下自作聪明改别人的程式码.
厉害的人应该是会抽出正确的 common,
当A 跟B都做完的时候, 拿 common 套回去不会很久的.
会被开发拖着走的 common, 表示需求根本就还没稳定到可以共同重构啊.
--
虚实之间的世界,
反抗军与
启蒙军的交集
带着
Android 去旅行、去发现
在身边浑然不觉的 另一个世界。
全世界,都是我们的 足迹与游乐场。
~ The world around you is not what it seems. ~ http://ingress.tw
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.138.6.255 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1593079648.A.A48.html
※ 编辑: TonyQ (223.138.6.255 台湾), 06/25/2020 18:08:45
※ 编辑: TonyQ (223.138.6.255 台湾), 06/25/2020 18:09:45
※ 编辑: TonyQ (223.138.6.255 台湾), 06/25/2020 18:12:13
1F:→ airtsubasa: 会忙有很多原因,不合理的时程,不合理的专案成员! 06/25 18:22
2F:推 king22649: 4. 怪怪的 06/25 18:28
假设从头写 A 的时间是 A1, 从头写 B 的时间是 B1,
正常情况下, 拿 A 直接改共用函式,
来写 B 的时间应该是 B2 , 且 B2 < B1 . (如果不是这样就不需要拿A改了).
假设 B2 写完之後回去套 A 的时间式 A2 .
总开发时间是 A1+A2+B2 , 而这时间应该要小於 A1 + B1, 且 A2 应该极低.
(不是极低表示你元件没拆对)
在这前提下, 这才算是重构, 不然只是单纯在重新开发元件而已.
3F:推 vi000246: TonyQ大说明得很清楚 感谢建议 06/25 18:41
4F:推 cplusplus426: 大大真的强者 06/25 19:37
5F:→ qrtt1: 不合理的成员丢温泉,不要挡输出。 06/25 20:27
6F:推 content71: 感谢,最近很有感受 06/25 21:04
7F:→ xo1100: 乱动别人code是行内大忌吧 06/25 22:34
8F:推 APTON: 推! 06/25 22:45
※ 编辑: TonyQ (210.61.209.201 台湾), 06/26/2020 12:41:58
※ 编辑: TonyQ (210.61.209.201 台湾), 06/26/2020 12:42:58
9F:推 Csongs: 推调理列出 06/26 14:11
10F:→ Csongs: *条理 06/26 14:11
11F:推 CloudyWing: 这篇讲得很好,推 06/26 17:40
12F:推 lerdor: 推 06/26 21:23
13F:→ allenxxx: 当我极菜时,曾经有两个前辈一个很不喜欢用oo,另一个极喜 06/27 01:25
14F:→ allenxxx: 欢,结果那位oo派的不知发甚麽神经私自去大改另一位程式 06/27 01:26
15F:→ allenxxx: 被火掉,因为原作者不肯继续维护除非老板给交代 06/27 01:27
16F:→ allenxxx: 真的别随便动人家东西,没有开发者或上级授权的话 06/27 01:27
17F:推 sharku: 推这篇 06/27 09:47
18F:推 king22649: 这代表本来A,B间就有良好的沟通吧 不然会有lib, build, 06/27 12:42
19F:→ king22649: design pattern使用不一样的问题 正常来说都是更花时 06/27 12:42
20F:→ king22649: 间的 06/27 12:42
21F:→ king22649: 就是因为完成再重构 更花时间 才会需要先MERGE 弄出com 06/27 12:43
22F:→ king22649: mon lib吧 06/27 12:43
23F:推 king22649: 等等 你要说的是 先重构再完成吧? 06/27 12:50
我觉得你在谈重构之前, 先好好重新组织你的问题再说......
不然很难跟你讨论你的明白.
"重构" 会不会更花时间是能力跟权责问题, 不是沟通问题.
是不是很多人都没看过 refactoring 该书啊?
为什麽这麽多人把整并功能视为重构? =_=
重构很单纯的就是[安全的]把程式逻辑从 A 投影成 B,以一种不容易改坏的形式,
而两套程式码如果可以幸运地刚好重叠在一起,就可以被整并。
如果无法,那表示需要进行功能异动,
而这时候就不是重构,而是在进行元件化作业的功能异动。
到目前为止的讨论,重构跟功能异动的两顶帽子很显然分不清楚啊.
这样的前提底下来谈重构是谈身体健康还是来灵修的吗?
※ 编辑: TonyQ (210.61.209.201 台湾), 06/27/2020 13:19:50
24F:推 king22649: 先完成A,B再重构的时间>先重构A部分逻辑给B引用的时间 06/27 14:17
25F:→ king22649: 两者应该都可以算是重构 第一个是重构A的comm lib部分 06/27 14:20
26F:→ king22649: 第二个是重构AB 两者功能上都没太大的异动 06/27 14:20
27F:→ king22649: 不太能理解 以时间作为重构的定义基准 06/27 14:21
28F:推 king22649: 你的先完成指的是啥 先各自完成?还是先完成A COMM LIB 06/27 14:24
29F:→ king22649: ? 06/27 14:24
"思考时间"为什麽不能作为基准. XDDD
另外, 重新写出 A/B 都能用的元件是不是重构, 要取决於 A/B 的逻辑有没有重叠,
你这前提没弄清楚就谈重构 AB , 基本上就已经是文不对题了. 後面都是零分好吗?
如果我已经写了上面两段你都还是看不懂, 我觉得你要另寻高明了.
你要怎麽认知这件事情是你的自由, 但很显然我们对重构的定义是不同的.
你如果对基础假设有问题, 应该是先弄清楚基础假设.
你怎麽知道 A跟B 一定有共用逻辑, 搞不好最後 A+B 会搞出个 C > A+B,
所以为什麽要假设 A+B 一定会有能够重构的交集呢?
而如果是这样, 又怎麽会是功能差不多呢?
太多吐槽点了, 就这样吧.
※ 编辑: TonyQ (210.61.209.201 台湾), 06/27/2020 14:34:04
30F:推 king22649: 你第一段解释没问题 第二段解释也没问题 但你的第四点 06/27 14:41
31F:→ king22649: 你真的不觉得需要解释或修正 如果真的觉得不需要 那就 06/27 14:41
32F:→ king22649: 当作是我的问题吧 06/27 14:41
33F:→ king22649: 第三个解释也是合理的 06/27 14:41
你看不懂坦白说不是我的责任, 我还是写给看得懂的人看就好. 我尽力了. XD
※ 编辑: TonyQ (210.61.209.201 台湾), 06/27/2020 15:08:05
34F:推 king22649: 你这边的重构使用的是 书里名词的定义那个? 06/27 15:13
35F:→ TonyQ: 我会建议你试着把你想像中的重构描述, 就会知道落差了. 06/27 15:18
36F:→ TonyQ: 我使用的重构定义文中已经描述过了, 请参照. 06/27 15:18
37F:推 king22649: 这满有趣的 确实是值得学习。 06/27 15:20
38F:→ pttworld: 如果对时间的定义包含测试则重构不一定比较快 06/27 19:45
39F:→ pttworld: 另外重构第一部有提到不遵守规则的重构坑越挖越大, 06/27 19:49
40F:→ pttworld: 整体时间反而是比较多的 06/27 19:50