Re: [討論] 一段想重構的程式碼

看板Soft_Job (軟體人)作者 (喲)時間12年前 (2013/07/25 23:52), 編輯推噓1(1019)
留言20則, 2人參與, 最新討論串4/10 (看更多)
※ 引述《tyc5116 (累人啊....)》之銘言: : 其中每個模組的func程式碼都是一樣的 : 所以我想說就再拉出一個介面,並實作這個func,a和b都繼承這個介面 : 這樣這段重覆的程式碼就可以省掉了 : 因為改成這樣的方式變動有點大,所以尊重一下主管,跟主管說一聲,看能不能這樣改 : 但是主管卻說,程式內有很多個thread,若以這樣的方式來寫,可能在同一時間 : 會有很多地方都會執行到func,造成debug的不易,不然就還要再類別內加個屬性, : 用來辨別目前執行func的是哪一個模組,雖然說目前是將同樣的func : 寫在各別的模組內,但是這樣在debug時會比較容易作區分,然後他不贊成我改@@ : 我對這個理由其實不太認同的,我是覺得加個屬性作為區分即可 : 然後程式都會跑到相同的地方,debug應該會變的更容易才對阿!! : 不知道大家的看法如何? 不對,你說的都走到一個func是使程式的修改非常容易,因為本來要把二段相同的程式 做相同的修改,用你的方法不怕做錯. 但是,講到debug,所謂debug就是發生問題時,要找到出錯的原因,而不只是找到出錯的 位置. 如果用你的辦法,則你的func責任比較大,要同時符合object a的狀態,也要 符合object b的狀態,程式可能會因為二種objects的差異,而寫得奇怪,相對,要找原因 也要同時想二種objects的可能. 這樣是比較難debug的. 物件導向是以物件自己做為思考觀點及思考範圍. 但是當你把一個func讓二種objects 都牽涉進來,則在維護object a的時候,卻要分心以object b的觀點來看a的func. 重構有一種做法是說盡可能別用旗標代表程式流程,所以做一些去除旗標的動作. 但如果你把二個func合成一個,旗標會變多,而且二種objects狀態也跟旗標的影響雷同. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.226.95.198

07/25 23:56, , 1F
如果只是二個,就沒差 問題是重複的Bug,就很慘
07/25 23:56, 1F

07/26 00:00, , 2F
怎麼會沒差呢? 你可要在50~60個classes中,認得有2個共用func
07/26 00:00, 2F

07/26 00:00, , 3F
完全一樣的動作建議還是抽出,copy/paste除錯會更慘
07/26 00:00, 3F

07/26 00:01, , 4F
光是要花費在記憶這種特例的精神,就讓人怨恨死你了.
07/26 00:01, 4F

07/26 00:01, , 5F
今天若是二個function,不抽共同邏輯沒關係 多個,很慘
07/26 00:01, 5F

07/26 00:02, , 6F
如果paste全部都是copy/paste的動作,將有大量時間浪費
07/26 00:02, 6F

07/26 00:02, , 7F
除非你具有獨立性質的邏輯抽出來做個單元,是有用的.
07/26 00:02, 7F

07/26 00:03, , 8F
所以我提到的是: 是可以獨立的邏輯,抽出共同邏輯
07/26 00:03, 8F

07/26 00:04, , 9F
或者趁幾次修改時,將新加的碼放在獨立的單元中.
07/26 00:04, 9F

07/26 00:04, , 10F
不然一樣的邏輯問題 又要去改數個拷貝貼上的重複 很慘
07/26 00:04, 10F

07/26 00:05, , 11F
但是,應該要搞清楚這是在工作. 重構是為了工作,還是為了高興
07/26 00:05, 11F

07/26 00:05, , 12F
工作效率其實可以從減少浪費時間作起
07/26 00:05, 12F

07/26 00:06, , 13F
如果一樣是作事情,建議可以減少機械動作
07/26 00:06, 13F

07/26 00:06, , 14F
那你最好算一算,到底減少浪費了多久時間.
07/26 00:06, 14F

07/26 00:07, , 15F
如果你漏了改某個地方呢? 那之後還要debug
07/26 00:07, 15F

07/26 00:07, , 16F
這是bad smell之中最為人知的其中一個: duplicated code
07/26 00:07, 16F

07/26 00:11, , 17F
算上機械動作,加上檢查是否漏改,以及漏改的debug時間
07/26 00:11, 17F

07/26 00:11, , 18F
應該減少duplicated code會比較節省時間
07/26 00:11, 18F

07/26 00:16, , 19F
此外,若沒有抽共同邏輯 同一個邏輯將會發展無數版本
07/26 00:16, 19F

07/26 00:16, , 20F
之後光是閱讀及維護 可能要找出原本的同樣debug,就累死
07/26 00:16, 20F
文章代碼(AID): #1HyKdGWm (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1HyKdGWm (Soft_Job)