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

看板Soft_Job作者 (得理饒人)時間3年前 (2020/06/25 18:07), 3年前編輯推噓16(16024)
留言40則, 15人參與, 3年前最新討論串5/5 (看更多)
※ 引述《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://www.ptt.cc/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

06/25 18:22, 3年前 , 1F
會忙有很多原因,不合理的時程,不合理的專案成員!
06/25 18:22, 1F

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

06/25 18:41, 3年前 , 3F
TonyQ大說明得很清楚 感謝建議
06/25 18:41, 3F

06/25 19:37, 3年前 , 4F
大大真的強者
06/25 19:37, 4F

06/25 20:27, 3年前 , 5F
不合理的成員丟溫泉,不要擋輸出。
06/25 20:27, 5F

06/25 21:04, 3年前 , 6F
感謝,最近很有感受
06/25 21:04, 6F

06/25 22:34, 3年前 , 7F
亂動別人code是行內大忌吧
06/25 22:34, 7F

06/25 22:45, 3年前 , 8F
推!
06/25 22:45, 8F
※ 編輯: TonyQ (210.61.209.201 臺灣), 06/26/2020 12:41:58 ※ 編輯: TonyQ (210.61.209.201 臺灣), 06/26/2020 12:42:58

06/26 14:11, 3年前 , 9F
推調理列出
06/26 14:11, 9F

06/26 14:11, 3年前 , 10F
*條理
06/26 14:11, 10F

06/26 17:40, 3年前 , 11F
這篇講得很好,推
06/26 17:40, 11F

06/26 21:23, 3年前 , 12F
06/26 21:23, 12F

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

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

06/27 01:27, 3年前 , 15F
被火掉,因為原作者不肯繼續維護除非老闆給交代
06/27 01:27, 15F

06/27 01:27, 3年前 , 16F
真的別隨便動人家東西,沒有開發者或上級授權的話
06/27 01:27, 16F

06/27 09:47, 3年前 , 17F
推這篇
06/27 09:47, 17F

06/27 12:42, 3年前 , 18F
這代表本來A,B間就有良好的溝通吧 不然會有lib, build,
06/27 12:42, 18F

06/27 12:42, 3年前 , 19F
design pattern使用不一樣的問題 正常來說都是更花時
06/27 12:42, 19F

06/27 12:42, 3年前 , 20F
間的
06/27 12:42, 20F

06/27 12:43, 3年前 , 21F
就是因為完成再重構 更花時間 才會需要先MERGE 弄出com
06/27 12:43, 21F

06/27 12:43, 3年前 , 22F
mon lib吧
06/27 12:43, 22F

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

06/27 14:17, 3年前 , 24F
先完成A,B再重構的時間>先重構A部分邏輯給B引用的時間
06/27 14:17, 24F

06/27 14:20, 3年前 , 25F
兩者應該都可以算是重構 第一個是重構A的comm lib部分
06/27 14:20, 25F

06/27 14:20, 3年前 , 26F
第二個是重構AB 兩者功能上都沒太大的異動
06/27 14:20, 26F

06/27 14:21, 3年前 , 27F
不太能理解 以時間作為重構的定義基準
06/27 14:21, 27F

06/27 14:24, 3年前 , 28F
你的先完成指的是啥 先各自完成?還是先完成A COMM LIB
06/27 14:24, 28F

06/27 14:24, 3年前 , 29F
?
06/27 14:24, 29F
"思考時間"為什麼不能作為基準. 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

06/27 14:41, 3年前 , 30F
你第一段解釋沒問題 第二段解釋也沒問題 但你的第四點
06/27 14:41, 30F

06/27 14:41, 3年前 , 31F
你真的不覺得需要解釋或修正 如果真的覺得不需要 那就
06/27 14:41, 31F

06/27 14:41, 3年前 , 32F
當作是我的問題吧
06/27 14:41, 32F

06/27 14:41, 3年前 , 33F
第三個解釋也是合理的
06/27 14:41, 33F
你看不懂坦白說不是我的責任, 我還是寫給看得懂的人看就好. 我盡力了. XD ※ 編輯: TonyQ (210.61.209.201 臺灣), 06/27/2020 15:08:05

06/27 15:13, 3年前 , 34F
你這邊的重構使用的是 書裡名詞的定義那個?
06/27 15:13, 34F

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

06/27 15:18, 3年前 , 36F
我使用的重構定義文中已經描述過了, 請參照.
06/27 15:18, 36F

06/27 15:20, 3年前 , 37F
這滿有趣的 確實是值得學習。
06/27 15:20, 37F

06/27 19:45, 3年前 , 38F
如果對時間的定義包含測試則重構不一定比較快
06/27 19:45, 38F

06/27 19:49, 3年前 , 39F
另外重構第一部有提到不遵守規則的重構坑越挖越大,
06/27 19:49, 39F

06/27 19:50, 3年前 , 40F
整體時間反而是比較多的
06/27 19:50, 40F
文章代碼(AID): #1Uz7TWf8 (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1Uz7TWf8 (Soft_Job)