March 09 21:30~22:42
▲雖然都是虎斑貓,但不是同一隻啊
先打個廣告,3月19、20 (六、日)舉辦的「Scrum敏捷方法實作班」已經確定開課,早鳥優惠到3/11(禮拜五),對敏捷開發有興趣的朋友們歡迎參加。
***
有朋友針對〈用Introduce Parameter Object移除Long Parameter List怪味道〉留言,提到:
「然後不小心就重構成strategy了...算了,不重要,忘了那個名稱吧~ :-)」
原本想回覆這位朋友的留言,但他自己把留言刪了。既然這位朋友提出這種觀點,可能也有其他相民有類似的看法,剛好最近都在忙沒什麼料,就借用這位朋友的留言…的屍體(因為留言已刪除XD)…來寫一篇好了。
***
▼先回顧一下〈用Introduce Parameter Object移除Long Parameter List怪味道〉重構後的結果:
Range類別和Strategy有不小的差別,原因如下:
- 目的不同
- Range是參數物件,目的是把參數打包,減少傳入函數的「數量」,更進一步則可將屬於操作這些參數的行為搬移到它的身上。
- Strategy定義並封裝一群可互相替代的演算法,通常會有多個Strategy的實作類別,而參數物件並沒有種特性。
- 結構不同
- Range包含了資料(data member)與操作(operation)。
- Strategy主要包含操作(演算法),大部分的資料應該都存放在Ccontext身上。請參考下面的Strategy類別圖。
▲圖片取自wikipedia
***
很多時候設計不需要拘泥在名稱上面,正所謂Quality Without A Name。但如果兩個觀念本身Quality不同,要把它們說成同一件事,感覺也有點怪。
***
友藏內心獨白:謝謝鄉民留言發表看法。
作者已經移除這則留言。
回覆刪除