PTT評價

Re: [請益] 這種情況要怎麼重構

看板Soft_Job標題Re: [請益] 這種情況要怎麼重構作者
TonyQ
(得理饒人)
時間推噓16 推:16 噓:0 →:24

※ 引述《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 留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.138.6.255 (臺灣)
PTT 網址
※ 編輯: 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

airtsubasa06/25 18:22會忙有很多原因,不合理的時程,不合理的專案成員!

king2264906/25 18:284. 怪怪的

假設從頭寫 A 的時間是 A1, 從頭寫 B 的時間是 B1, 正常情況下, 拿 A 直接改共用函式, 來寫 B 的時間應該是 B2 , 且 B2 < B1 . (如果不是這樣就不需要拿A改了). 假設 B2 寫完之後回去套 A 的時間式 A2 . 總開發時間是 A1+A2+B2 , 而這時間應該要小於 A1 + B1, 且 A2 應該極低. (不是極低表示你元件沒拆對) 在這前提下, 這才算是重構, 不然只是單純在重新開發元件而已.

vi00024606/25 18:41TonyQ大說明得很清楚 感謝建議

cplusplus42606/25 19:37大大真的強者

qrtt106/25 20:27不合理的成員丟溫泉,不要擋輸出。

content7106/25 21:04感謝,最近很有感受

xo110006/25 22:34亂動別人code是行內大忌吧

APTON06/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

Csongs06/26 14:11推調理列出

Csongs06/26 14:11*條理

CloudyWing06/26 17:40這篇講得很好,推

lerdor06/26 21:23

allenxxx06/27 01:25當我極菜時,曾經有兩個前輩一個很不喜歡用oo,另一個極喜

allenxxx06/27 01:26歡,結果那位oo派的不知發甚麼神經私自去大改另一位程式

allenxxx06/27 01:27被火掉,因為原作者不肯繼續維護除非老闆給交代

allenxxx06/27 01:27真的別隨便動人家東西,沒有開發者或上級授權的話

sharku06/27 09:47推這篇

king2264906/27 12:42這代表本來A,B間就有良好的溝通吧 不然會有lib, build,

king2264906/27 12:42 design pattern使用不一樣的問題 正常來說都是更花時

king2264906/27 12:42間的

king2264906/27 12:43就是因為完成再重構 更花時間 才會需要先MERGE 弄出com

king2264906/27 12:43mon lib吧

king2264906/27 12:50等等 你要說的是 先重構再完成吧?

我覺得你在談重構之前, 先好好重新組織你的問題再說...... 不然很難跟你討論你的明白. "重構" 會不會更花時間是能力跟權責問題, 不是溝通問題. 是不是很多人都沒看過 refactoring 該書啊? 為什麼這麼多人把整併功能視為重構? =_= 重構很單純的就是[安全的]把程式邏輯從 A 投影成 B,以一種不容易改壞的形式, 而兩套程式碼如果可以幸運地剛好重疊在一起,就可以被整併。 如果無法,那表示需要進行功能異動, 而這時候就不是重構,而是在進行元件化作業的功能異動。 到目前為止的討論,重構跟功能異動的兩頂帽子很顯然分不清楚啊. 這樣的前提底下來談重構是談身體健康還是來靈修的嗎?

※ 編輯: TonyQ (210.61.209.201 臺灣), 06/27/2020 13:19:50

king2264906/27 14:17先完成A,B再重構的時間>先重構A部分邏輯給B引用的時間

king2264906/27 14:20兩者應該都可以算是重構 第一個是重構A的comm lib部分

king2264906/27 14:20第二個是重構AB 兩者功能上都沒太大的異動

king2264906/27 14:21不太能理解 以時間作為重構的定義基準

king2264906/27 14:24你的先完成指的是啥 先各自完成?還是先完成A COMM LIB

king2264906/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

king2264906/27 14:41你第一段解釋沒問題 第二段解釋也沒問題 但你的第四點

king2264906/27 14:41你真的不覺得需要解釋或修正 如果真的覺得不需要 那就

king2264906/27 14:41當作是我的問題吧

king2264906/27 14:41第三個解釋也是合理的

你看不懂坦白說不是我的責任, 我還是寫給看得懂的人看就好. 我盡力了. XD

※ 編輯: TonyQ (210.61.209.201 臺灣), 06/27/2020 15:08:05

king2264906/27 15:13你這邊的重構使用的是 書裡名詞的定義那個?

TonyQ06/27 15:18我會建議你試著把你想像中的重構描述, 就會知道落差了.

TonyQ06/27 15:18我使用的重構定義文中已經描述過了, 請參照.

king2264906/27 15:20這滿有趣的 確實是值得學習。

pttworld06/27 19:45如果對時間的定義包含測試則重構不一定比較快

pttworld06/27 19:49另外重構第一部有提到不遵守規則的重構坑越挖越大,

pttworld06/27 19:50整體時間反而是比較多的