作者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/m.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