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

看板Soft_Job作者 (RESTful Web Services)時間12年前 (2013/07/26 01:51), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/10 (看更多)
※ 引述《yauhh (喲)》之銘言: : 不對,你說的都走到一個func是使程式的修改非常容易,因為本來要把二段相同的程式 : 做相同的修改,用你的方法不怕做錯. : 但是,講到debug,所謂debug就是發生問題時,要找到出錯的原因,而不只是找到出錯的 : 位置. 如果用你的辦法,則你的func責任比較大,要同時符合object a的狀態,也要 : 符合object b的狀態,程式可能會因為二種objects的差異,而寫得奇怪,相對,要找原因 : 也要同時想二種objects的可能. 這樣是比較難debug的. 可以先把 func() 中在不同類別會有不同的行為的部份獨立成一個個函數 func() { .... foo() .... bar() // 不能共用的部份獨立出來 .... } 然後就可以用 strategy 或 template pattern 處理不同的部份,這樣還 是可以享受到把相似的 func() 抽出來的好處 : 物件導向是以物件自己做為思考觀點及思考範圍. 但是當你把一個func讓二種objects : 都牽涉進來,則在維護object a的時候,卻要分心以object b的觀點來看a的func. : 重構有一種做法是說盡可能別用旗標代表程式流程,所以做一些去除旗標的動作. : 但如果你把二個func合成一個,旗標會變多,而且二種objects狀態也跟旗標的影響雷同. 用上面的作法就可以去掉 flag ,不過有時候如果 flag 的狀態、數目在 「可預見的未來」會是固定的、一支手數的完的,跟設計新的 class hierachy 比起來,使用 flag 可能更簡潔。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.94.194 ※ 編輯: elvispoetic 來自: 114.43.94.194 (07/26 01:51)
文章代碼(AID): #1HyMMNOs (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1HyMMNOs (Soft_Job)