整潔代碼的層次繼續上升,從類到系統,本章講解如何在較高的系統層級上保持代碼整潔
11.1 如何建造一個城市
- 系統和城市一樣,有些人負責全局,其他人負責細節,幾乎不可能一個人掌控所有
11.2 將系統的構造與使用分開
- 軟件系統應該將啓動過程和運行時邏輯進行分離
11.2.1 分解 main 方法
- 將構造與使用分開的方法之一就是 將全部的構造過程搬遷到 main 方法中
11.2.2 工廠
- 有時候應用程序也要負責確定什麼時候創建對象
11.2.3 依賴注入( Dependency Injection ,DI )
- 控制反轉( Inversion of Control ,IoC ) 時依賴注入的一種應用手段
- 控制反轉將對象的第二權責抽離出來,轉移到另一個屬於它的對象中,使兩個對象都遵循 單一權責原則
11.3 擴容
- 系統需要擴容是非常現實的需求,因爲一開始沒有人能把一切都設計的那麼超前
- 迭代和增量開發是每個系統都需要經歷的事
- 面向切面編程( aspect-oriented progamming ,AOP ) 是一種可以讓系統實現快速擴容的編程手段
- 在 AOP 中,被稱爲切面的模塊構造,指明瞭系統中哪些行爲會通過某種方式被修改,從而讓某些特定場景被支持
11.4 Java 代理
- JDK 提供的 動態代理 只能和藉口協同工作
- 龐大的代碼量和複雜的操作邏輯是動態代理的兩大弱點
11.5 純 Java AOP 框架
- SpringAOP 就是一個純 Java AOP 框架,它通過編寫 XML 內容來實現系統中各種 Bean 的依賴注入
11.6 AspectJ 的切面
- AspectJ 是通過切面來實現關注面切分的工具
11.7 測試驅動系統架構
- 最佳的系統架構由模塊化的關注面領域組成,每個關注面都使用統一對象實現
11.8 優化決策
- 模塊化和關注面切分成就了分散化的管理和決策
- 有時候決策不一定非要預先作出,延遲決策到最後一刻也不失爲一種好手段
11.9 明智使用添加了可論證價值的標準
- 創立標準的過程有時非常漫長
11.10 系統需要領域特定語言
- 領域特定語言( Doamin-Specific Lanuage ,DSL ) 是一種單獨的小型腳本語言,或通過標準語言編寫的 API 集合
11.11 小結
- 系統也應該是整潔的
- 侵害性架構會湮滅系統邏輯,衝擊整個系統的敏捷開發能力
- 無論是設計系統或單獨的模塊,都最好使用當前環境下可實現的最簡單方案