May 19 19:38~20:35
Data Class(資料類別)
Data Class是指只有屬性(資料成員),或是存取這些屬性的getter/setter函數,但卻沒有其他行為函數的類別。從物件導向的角度來看,類別應該包含資料與行為,一個只有資料的類別,隱含在其他地方會有一些程式碼來處理它。何不考慮將這些散布在各處,處理Data Class的程式碼,搬移到Data Class身上呢?
寫到這邊Teddy的腦袋浮出了「Value Object」和「Data Transform Object」,這兩種物件不正是Data Class這個壞味道的最佳候選人?可是「Value Object」和「Data Transform Object」算是兩個知名的pattern,這要怎麼說?
看來案情並不單純,一定有其他更強大的force,蓋掉「類別應該有資料跟行為」這個force。對Value Object來說,因為是不可修改的物件,對於簡化multi-threaded程式設計就很有幫助。至於Data Transfer Object這個印象中屬於J2EE的pattern,有些人喜歡,有些人不喜歡,Teddy就…暫時不選邊站了。
***
Data Class之所以會是一個bad smell的原因(force)可歸類為:understandability(因為行為和資料分開了,比較不容易理解)和modifiability(如果資料改了,分散在四處的行為可能也需要跟著改變,所以降低可修改性)這兩點。
移除Data Class壞味道的方法,在《Refactoring》書中提到可以套用Encapsulate Field 、Encapsulate Collection、Remove Setting Method、Move Method、Extract Method、Hide Method。
***
友藏內心獨白:怎麼有種越後面的壞味道越刁鑽的感覺。
請問這裡說的 Data Transform Object 是指 Data Transfer Object 嗎
回覆刪除對,已修正,謝謝。
刪除