定義:一個或少數類不斷膨脹,吞噬整個面向對象架構。表現為:單一類壟斷處理邏輯,其他類退化為無行為的數據容器 (Data Class/DTO)。
| 根因類別 | 具體表現 |
|---|---|
| 思維模式滯後 | 開發者習慣面向過程設計:將過程與數據分離,而非 OO 的「數據+行為」封裝 |
| 需求分析缺失 | 未識別領域核心概念,導致職責劃分錯誤,核心業務邏輯集中在單一控制器 |
| 演進失控 | 迭代中新功能持續堆疊到現有類,缺乏重構機制,新成員不熟悉架構邊界 |
| 架構治理缺位 | 無代碼審查、無架構評審、無度量指標(如類行數、方法數、圈複雜度)閾值管控 |
| 形式 | 特徵 | 典型場景 |
|---|---|---|
| 行為型 Blob | 所有處理邏輯集中在一類,與大多數其他對象交互 | Service 層巨無霸、Controller 包含所有業務規則 |
| 數據型 Blob | 包含被系統大部分對象使用的數據,常為「上帝配置類」或「上下文持有者」 | GlobalConfig、UserSession、GodContext |
1. 識別契約:提取相關屬性與方法集合(高內聚切片)
2. 尋找「自然的家」:將切片遷移至語義匹配的領域對象
3. 移除遠耦合:消除冗餘間接依賴,建立直接協作關係
4. 清理瞬時關聯:移除臨時、過渡性的字段與方法
重構前:OrderProcessor (800 行) 包含:價格計算、庫存扣減、優惠券驗證、郵費計算、訂單持久化、消息發送、日誌記錄
重構後:
PricingService:價格/優惠/郵費計算InventoryService:庫存扣減/補償OrderRepository:持久化NotificationService:消息發送OrderCoordinator(原 Processor 退化為):編排上述服務,事務邊界控制本質轉變:控制器 → 協調器,數據類擴充行為成為領域對象,協調器僅負責流程編排。
| 手法 | 適用場景 | 工具支持 |
|---|---|---|
| Extract Class | 提取高內聚方法群為新類 | IDE 重構菜單 |
| Move Method/Field | 將行為移至數據所在類 | IDE 重構菜單 |
| Replace Data Value with Object | 將基礎類型字段提升為值對象 | 手動 + 測試保護 |
| Introduce Parameter Object | 合併長參數列表 | IDE 重構 |
| Preserve Whole Object | 傳遞完整對象而非分散字段 | 手動 |