純虛構 濫用篇| Pure Fabrication
純虛構圖片來源
複習前篇
純虛構並不是源自真實世界的角色(像老師、學生、訂單),卻是為了讓程式碼更好維護、邏輯更清晰而生的。
這些物件專門負責單一職責,像是:
- 負責寄信的
EmailSender - 管資料存取的
Repository - 幫忙做運算的
Calculator
它們的出現,就像開發現場的工具人,不會出現在領域物件裡,但卻是實作流程中不可或缺的存在,但與此同時也很容易被濫用,這也是下一個主題。
濫用
“ 如果濫用純虛構,會導致大量的行為物件,其職責與執行職責所需要的信息沒有結合起來,這樣會對耦合產生不良影響。 通常徵兆是,物件內的大部分數據被傳遞給其他物件用以處理 ”
濫用純虛構(Pure Fabrication)。通常會違反高內聚。這樣還很抽象的話,可以參考以下三種徵兆:
- 空殼:只剩屬性。
- 不沾鍋:只負責傳遞資訊。
- 大工具箱:低內聚的工具類別。
接下來會詳細介紹這些特徵。
空殼
想必大家可能在寫程式時,遇到某些物件,只有屬性。但他不像 DTO、Request、Response 類負責跨層傳遞;也不像某些 ViewModel 負責渲染;也不是負責接資料庫來的資訊。
他就是一個純屬性的物件,要注意了,這種「空殼」物件就是純虛構濫用的特徵。
這種空殼類別最大的危害就是搭配 Mapper 套件,因為不是跨層傳遞、渲染、接資料庫資料所以常常忽略更新,導致邏輯都正常、資料都正常,但就是顯示的怪怪的。
不沾鍋
“ 我不知道、我不清楚、我不明白 ”
大家上班時都會遇到一件事情,要向客戶或其他部門問個問題,然後被瘋狂踢皮球,最後沒有得到答案。
濫用純虛構也是這樣,一個物件可以完成的職責,硬分成三四個物件處理,其中某幾個物件只是負責把參數從A傳到B。
這樣的物件就像是辦公室裡的「不沾鍋」,什麼都不做,只是把問題丟給別人。
大工具箱
筆者去 IKEA 要買東西常常要找很久,因為裡面太多東西了,家具、玩偶甚麼都在那個大賣場。
純虛構濫用也會出現這樣,幾千行的 Helper、Util 類別裡面包容萬象,各種與領域邏輯不相關的都在裡面
作者心得
最近發現早睡精神比較好。