定義
在面向對象編程領域,上帝對象(God object)是一個了解過多或者負責過多的對象。 上帝對象是 反模式(anti-pattern) 和 代碼異味(code smell)的例子。
全能的上帝
筆者曾在某個項目遇到了這種"上帝"工具類Helper
和Tools
,里面涵蓋的功能真是五花八門,UI快捷設置、時間戳的各種擴展、數據的驗證、對應的業務邏輯等等。
猶如工具類的跳蚤市場,新舊API集聚于此,少則幾千行,多則上萬,里面的工具函數真是的是無所不知,無所不能,但是想要駕馭上帝,確實太難了~
是什么造就了上帝?
出現這種問題基本都是一下幾點
- 工具類的職責沒有統一的規劃
- 缺少公共組件的維護
- 向工具類中添加函數無限制
最重要的原因是公共組件并沒有受到重視,慢慢就會變成整個項目中隨意丟棄爛代碼的垃圾站。
總結
工具類中的API變動應該是緩慢的,判斷是否應該向工具類中添加函數可從一下幾條進行判斷
- 不涉及具體模塊的業務邏輯
- 通用性強
- 可寫成擴展方法
- 其函數所需要的依賴是穩定性依賴
- 原始工具類中的職責與其相關
- 其復雜性不能通過簡單幾行代碼代替