純虛構 濫用篇| Pure Fabrication

2025-07-29
GRASP

多的像路邊的野狗耶

純虛構圖片來源

複習前篇

純虛構並不是源自真實世界的角色(像老師、學生、訂單),卻是為了讓程式碼更好維護、邏輯更清晰而生的。

這些物件專門負責單一職責,像是:

  • 負責寄信的 EmailSender
  • 管資料存取的 Repository
  • 幫忙做運算的 Calculator

它們的出現,就像開發現場的工具人,不會出現在領域物件裡,但卻是實作流程中不可或缺的存在,但與此同時也很容易被濫用,這也是下一個主題。


濫用

“ 如果濫用純虛構,會導致大量的行為物件,其職責與執行職責所需要的信息沒有結合起來,這樣會對耦合產生不良影響。 通常徵兆是,物件內的大部分數據被傳遞給其他物件用以處理 ”

― Craig Larman, Applying UML and Patterns 3rd, ch25.2

濫用純虛構(Pure Fabrication)。通常會違反高內聚。這樣還很抽象的話,可以參考以下三種徵兆:

  • 空殼:只剩屬性。
  • 不沾鍋:只負責傳遞資訊。
  • 大工具箱:低內聚的工具類別。

接下來會詳細介紹這些特徵。

空殼

想必大家可能在寫程式時,遇到某些物件,只有屬性。但他不像 DTO、Request、Response 類負責跨層傳遞;也不像某些 ViewModel 負責渲染;也不是負責接資料庫來的資訊。

他就是一個純屬性的物件,要注意了,這種「空殼」物件就是純虛構濫用的特徵。

這種空殼類別最大的危害就是搭配 Mapper 套件,因為不是跨層傳遞、渲染、接資料庫資料所以常常忽略更新,導致邏輯都正常、資料都正常,但就是顯示的怪怪的。

不沾鍋

“ 我不知道、我不清楚、我不明白 ”

― 羅傑 Roger9527

大家上班時都會遇到一件事情,要向客戶或其他部門問個問題,然後被瘋狂踢皮球,最後沒有得到答案。

濫用純虛構也是這樣,一個物件可以完成的職責,硬分成三四個物件處理,其中某幾個物件只是負責把參數從A傳到B。

這樣的物件就像是辦公室裡的「不沾鍋」,什麼都不做,只是把問題丟給別人。

大工具箱

筆者去 IKEA 要買東西常常要找很久,因為裡面太多東西了,家具、玩偶甚麼都在那個大賣場。

純虛構濫用也會出現這樣,幾千行的 Helper、Util 類別裡面包容萬象,各種與領域邏輯不相關的都在裡面


作者心得

最近發現早睡精神比較好。


參考資料

也可以看看以下文章