【code smell: Data Class】
獻給那些老吵著 Data Class 不可以有自己行為的朋友。
--
其實也不能說他們錯,而是應該更進一步來說:為啥你需要有純粹的 Data Class。
Data Class 不可以有行為,那當它有行為時,我們就不要把它當 Data Class 看就好啦。
Simple Design 的第四條:The Fewest Elements。要完成同樣的事情,element 越少越好,而如果有純粹的 Data Class 存在,往往就會有對應的 helper 或 mode class 存在來操作這些資料,提供行為。
最終兩個 class 就會被合併起來,以減少不必要的 element,而那時 class 就會同時有資料、有行為。(這才叫做內聚跟物件啊)
—
脈絡大致上是這樣:
有資料,就一定有人會用它。用它的人如果把資料攤開來用,往往就又會出現 primitive obsession 或 data clump 的壞味道。
如果不攤開來用,這時 Data Class 的存在就只是個載體,要用這些資料,就要透過別的物件才能使用它,讓它發揮存在的價值。
而如果是這樣,只操作資料的 Class 與只存放資料的 Class 往往就可以被合併,因為方法會出現 feature envy 壞味道。
自始至終躲不掉的。
--
每個梯次總會有人說,我們公司/團隊 的 Data class 不可以有其他 function,但當我問為什麼?當我給個情境詢問,好處在哪?問題在哪?通常都得不到一個清楚的答案。
就像第 N 代以後的猴子,大家都不知道為什麼不能拿香蕉了。(哏:https://tainan.catholic.org.tw/at/47.htm)
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...
「data class code smell」的推薦目錄:
data class code smell 在 91 敏捷開發之路 Facebook 的最讚貼文
最近看 legacy code 比較進階版且很多人不覺得/不知道有問題的問題:
1. 無謂切分出很多 projects/packages;
2. 多了很多不必要的繼承關係;
3. 某些 class 不該有方法;
常見的進階 code smell:
1. Primitive Obsession
2. Data Clump
3. Feature Envy
上列這些問題的重點在於,大部分的工程師都是不覺得有問題。
要設計出「簡單」、「好用」的軟體架構跟 API, 這些都是核心基本功啊...
另一個比較特別的問題是「不必要的中間層」,通常都會得到:因為以前的 code 都這樣寫,所以要一致性。
但為什麼這樣寫,有什麼好處,不這樣寫有什麼問題,還可以怎麼寫更簡單?通常都得不到答案。
data class code smell 在 91 敏捷開發之路 Facebook 的精選貼文
最近看 legacy code 比較進階版且很多人不覺得/不知道有問題的問題:
1. 無謂切分出很多 projects/packages;
2. 多了很多不必要的繼承關係;
3. 某些 class 不該有方法;
常見的進階 code smell:
1. Primitive Obsession
2. Data Clump
3. Feature Envy
上列這些問題的重點在於,大部分的工程師都是不覺得有問題。
要設計出「簡單」、「好用」的軟體架構跟 API, 這些都是核心基本功啊...
另一個比較特別的問題是「不必要的中間層」,通常都會得到:因為以前的 code 都這樣寫,所以要一致性。
但為什麼這樣寫,有什麼好處,不這樣寫有什麼問題,還可以怎麼寫更簡單?通常都得不到答案。