Re: [請益] 這種情況要怎麼重構
※ 引述《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
--
會忙有很多原因,不合理的時程,不合理的專案成員!
4. 怪怪的
假設從頭寫 A 的時間是 A1, 從頭寫 B 的時間是 B1, 正常情況下, 拿 A 直接改共用函式, 來寫 B 的時間應該是 B2 , 且 B2 < B1 . (如果不是這樣就不需要拿A改了). 假設 B2 寫完之後回去套 A 的時間式 A2 . 總開發時間是 A1+A2+B2 , 而這時間應該要小於 A1 + B1, 且 A2 應該極低. (不是極低表示你元件沒拆對) 在這前提下, 這才算是重構, 不然只是單純在重新開發元件而已.
TonyQ大說明得很清楚 感謝建議
大大真的強者
不合理的成員丟溫泉,不要擋輸出。
感謝,最近很有感受
亂動別人code是行內大忌吧
推!
推調理列出
*條理
這篇講得很好,推
推
當我極菜時,曾經有兩個前輩一個很不喜歡用oo,另一個極喜
歡,結果那位oo派的不知發甚麼神經私自去大改另一位程式
被火掉,因為原作者不肯繼續維護除非老闆給交代
真的別隨便動人家東西,沒有開發者或上級授權的話
推這篇
這代表本來A,B間就有良好的溝通吧 不然會有lib, build,
design pattern使用不一樣的問題 正常來說都是更花時
間的
就是因為完成再重構 更花時間 才會需要先MERGE 弄出com
mon lib吧
等等 你要說的是 先重構再完成吧?
我覺得你在談重構之前, 先好好重新組織你的問題再說...... 不然很難跟你討論你的明白. "重構" 會不會更花時間是能力跟權責問題, 不是溝通問題. 是不是很多人都沒看過 refactoring 該書啊? 為什麼這麼多人把整併功能視為重構? =_= 重構很單純的就是[安全的]把程式邏輯從 A 投影成 B,以一種不容易改壞的形式, 而兩套程式碼如果可以幸運地剛好重疊在一起,就可以被整併。 如果無法,那表示需要進行功能異動, 而這時候就不是重構,而是在進行元件化作業的功能異動。 到目前為止的討論,重構跟功能異動的兩頂帽子很顯然分不清楚啊. 這樣的前提底下來談重構是談身體健康還是來靈修的嗎?
※ 編輯: TonyQ (210.61.209.201 臺灣), 06/27/2020 13:19:50先完成A,B再重構的時間>先重構A部分邏輯給B引用的時間
兩者應該都可以算是重構 第一個是重構A的comm lib部分
第二個是重構AB 兩者功能上都沒太大的異動
不太能理解 以時間作為重構的定義基準
你的先完成指的是啥 先各自完成?還是先完成A COMM LIB
?
"思考時間"為什麼不能作為基準. 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你第一段解釋沒問題 第二段解釋也沒問題 但你的第四點
你真的不覺得需要解釋或修正 如果真的覺得不需要 那就
當作是我的問題吧
第三個解釋也是合理的
你看不懂坦白說不是我的責任, 我還是寫給看得懂的人看就好. 我盡力了. XD
※ 編輯: TonyQ (210.61.209.201 臺灣), 06/27/2020 15:08:05你這邊的重構使用的是 書裡名詞的定義那個?
我會建議你試著把你想像中的重構描述, 就會知道落差了.
我使用的重構定義文中已經描述過了, 請參照.
這滿有趣的 確實是值得學習。
如果對時間的定義包含測試則重構不一定比較快
另外重構第一部有提到不遵守規則的重構坑越挖越大,
整體時間反而是比較多的
3
其實我真的不懂為什麼要急著重構 有好處嗎? 一般而言,重構都是發生在農閒的時候 就是沒有新案子在趕,老闆又要想辦法把人力資源給排滿 以免被上面丟一坨賽過來的最好理由15
我這篇寫的跟原原PO的狀況無關 ※ 引述《tbpfs ( )》之銘言: : 其實我真的不懂為什麼要急著重構 : 有好處嗎? : 一般而言,重構都是發生在農閒的時候2
如果專案有deadline的壓力建議是先各自發展以不相互影響為前提,最後再用剩餘時間開 一個分支做重構。其實這就是在規劃專案時沒有一個主要主導的設計人,沒有定義從系統 到功能的分工,導致代碼重工,而且缺乏溝通。 真的建議未來有機會在主導你還是要自己學會定義好工作,先學習不寫code就可以訂出功 能以及架構。我自己工作後常常遇到工程師很喜歡自幹,還沒開始就急著寫code,而不是26
首Po我現在遇到一個情況 同時跟其他人開發很相似的功能 舉例來說 我跟B同時開發兩個電商網站 一個叫博客來,一個叫蝦皮好了 B已經建好博客來商品列表頁面 我也要建立蝦皮的商品列表 想把B建的博客來頁面拿來用
35
[討論] 重構跟kpi的考量假設以下情境 有個功能A、B都會用到相同邏輯,且有兩份重覆的code (沒有unit test保護,而且年久失修 要加入unit test會需要更多時程) 現在要加入C,也會用到相同邏輯 身為合格的工程師 應該會把ABC重覆的部份提取出來26
[討論] 重構之前要寫測試 不然不要重構想想這應該算是一種迷思吧 理論上是這樣沒錯 但事實上之前都沒寫測試了 你怎麼證明他之前是對的呢? 所以我大多都直接給他改下去18
[心得]以策略模式重構switch case或if (影片)最近在客戶那邊一起 pair 重構 legacy code, 碰到了一大段 if/else statement,用來判斷什麼時候該使用哪一種cache, 並依照不同 cache 的邏輯來決定回傳的內容。 發現還是有蠻多風氣比較封閉的公司對這類型的基本功跟處理不是很熟悉, 可能是對 code smell 不熟,對重構不熟,對 design pattern 不熟,對工具不熟。17
Re: [討論] 重構之前要寫測試 不然不要重構這就是TAD, 一般做法是假設以前人做的是對的 拿以前的output當測資 避免以後的output跟預期結果不同 技術面的錯誤→沒有防呆/沒有釋放資源/overflow/沒有check 這應該不在討論範圍內, 也有客觀標準 行為與邏輯的部分才是有爭議的, 要嘛根本沒規格只有口傳13
Re: [討論] 重構跟kpi的考量感覺這個標題就是個假議題,你說不重構A、B因為Unit test來不及寫,那你新寫的C就不 用unit test了? 然後你又說三個code一模一樣,假設你幫C寫完unit test了,那你不就也把AB搞好了嗎? 再退一萬步來講,AB沒有unit test大家用的那麼爽你還硬要去動也只是吃飽太閒,不如 好好寫你C的unit test,寫完大家就用C就好啦2
Re: [請益] coding style差太多怎辦?重構取決於你對自己的程度有多自信 假設已經發現問題 也覺得自己有能力修改 試著跟主管溝通看看 說「在自己任務時程不耽誤的前提下 有路過看到程式碼就稍微整理一下」 若有得到主管或同事許可就下去改 沒把握自己可以改好的話 量力而為 先從小區塊開始改起