看板 Soft_Job 關於我們 聯絡資訊
※ 引述《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
typepeter:如果只是二個,就沒差 問題是重複的Bug,就很慘 07/25 23:56
yauhh:怎麼會沒差呢? 你可要在50~60個classes中,認得有2個共用func 07/26 00:00
typepeter:完全一樣的動作建議還是抽出,copy/paste除錯會更慘 07/26 00:00
yauhh:光是要花費在記憶這種特例的精神,就讓人怨恨死你了. 07/26 00:01
typepeter:今天若是二個function,不抽共同邏輯沒關係 多個,很慘 07/26 00:01
typepeter:如果paste全部都是copy/paste的動作,將有大量時間浪費 07/26 00:02
yauhh:除非你具有獨立性質的邏輯抽出來做個單元,是有用的. 07/26 00:02
typepeter:所以我提到的是: 是可以獨立的邏輯,抽出共同邏輯 07/26 00:03
yauhh:或者趁幾次修改時,將新加的碼放在獨立的單元中. 07/26 00:04
typepeter:不然一樣的邏輯問題 又要去改數個拷貝貼上的重複 很慘 07/26 00:04
yauhh:但是,應該要搞清楚這是在工作. 重構是為了工作,還是為了高興 07/26 00:05
typepeter:工作效率其實可以從減少浪費時間作起 07/26 00:05
typepeter:如果一樣是作事情,建議可以減少機械動作 07/26 00:06
yauhh:那你最好算一算,到底減少浪費了多久時間. 07/26 00:06
typepeter:如果你漏了改某個地方呢? 那之後還要debug 07/26 00:07
typepeter:這是bad smell之中最為人知的其中一個: duplicated code 07/26 00:07
typepeter:算上機械動作,加上檢查是否漏改,以及漏改的debug時間 07/26 00:11
typepeter:應該減少duplicated code會比較節省時間 07/26 00:11
typepeter:此外,若沒有抽共同邏輯 同一個邏輯將會發展無數版本 07/26 00:16
typepeter:之後光是閱讀及維護 可能要找出原本的同樣debug,就累死 07/26 00:16