Re: [討論] 一段想重構的程式碼
看板Soft_Job作者elvispoetic (RESTful Web Services)時間12年前 (2013/07/26 01:51)推噓0(0推 0噓 0→)留言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)
討論串 (同標題文章)