內容簡介
內容簡介 『建議搭配Uncle Bob的《Clean Architecture》,一本學理論,另一本學實作,兩本一起服用學習效果更佳。』 -「搞笑談軟工」板主Teddy Chen 專文推薦 [名家名著] 27 Clean Architecture實作篇:在整潔的架構上弄髒你的手 Get Your Hands Dirty on Clean Architecture 所有人都想要找出一種架構設計,能以最少的開發成本,打造最好又富有彈性的軟體。但是各種無理的時限壓力,以及各種不得已的偷吃步做法,讓我們離理想中的架構設計越來越遠。 本書會先從傳統的階層式架構設計入手,針對此架構的優缺點開始討論。接著,我們也會討論由Robert C. Martin(Uncle Bob)所提出的「整潔的架構」(Clean Architecture)以及由Alistair Cockburn所提出的「六角形架構」(Hexagonal Architecture),探討這類以業務領域為主的架構設計有什麼好處。隨後,本書會用實際的Java程式碼,帶領各位讀者親自動手做一遍六角形架構的實作流程。 你將學習如何在六角形架構的架構層之間選擇並實作對應策略,以及如何將架構中的各種元素組裝為應用程式。然後,我們也會說明如何強化架構中的邊界,並以理性的態度探討偷吃步的做法會造成什麼樣的技術債影響,以及在什麼樣的情況下,我們會願意承擔這類技術債。 讀完這本書,讀者將學會使用六角形架構的設計風格,建立整潔的網頁應用程式。 學習目標: ・採用階層式架構會有什麼潛在問題 ・如何強化架構中的邊界 ・偷吃步做法會為軟體架構帶來什麼潛在影響 ・應該在何時採用何種架構設計風格 ・根據架構設計來安排程式檔案結構 ・針對架構中不同的元素安排不同的測試策略 下載範例程式檔案: 本書的程式碼是由GitHub託管,可點選下面圖案前往下載:
產品目錄
產品目錄 推薦序|Teddy Chen 作者序 Chapter 01:階層式架構的問題點 資料庫驅動設計 在階層中偷吃步 難以執行的測試 使用案例不知影 平行分工的困難 如何讓軟體邁向可維護性的目標? Chapter 02:依賴反轉 單一職責原則 與副作用之間的陳年往事 依賴反轉原則 整潔的架構 六角形架構 如何讓軟體邁向可維護性的目標? Chapter 03:程式結構 以架構層為結構 以功能為結構 可呈現出架構的套件結構 依賴注入的影響 如何讓軟體邁向可維護性的目標? Chapter 04:使用案例實作 領域模型實作 使用案例長話短說 輸入驗證 利用建構子的好處 不同的使用案例、不同的輸入模型 業務規則驗證 充血領域模型與貧血領域模型 不同的使用案例、不同的輸出模型 唯讀使用案例的問題 如何讓軟體邁向可維護性的目標? Chapter 05:網頁層轉接器實作 依賴反轉 網頁層轉接器的職責 分割開來的控制器 如何讓軟體邁向可維護性的目標? Chapter 06:儲存層轉接器實作 依賴反轉 儲存層轉接器的職責 分割開來的轉接埠介面 分割開來的儲存層轉接器 以Spring Data JPA為例 資料庫交易的問題 如何讓軟體邁向可維護性的目標? Chapter 07:架構測試 測試金字塔 領域實體的單元測試 使用案例的單元測試 網頁層轉接器的整合測試 儲存層轉接器的整合測試 系統主要路徑的系統測試 要多少測試才算夠? 如何讓軟體邁向可維護性的目標? Chapter 08:架構層之間的對應策略 不對應策略(No Mapping) 雙向對應策略(Two-Way Mapping) 全部對應策略(Full Mapping) 單向對應策略(One-Way Mapping) 如何選擇要採用的策略? 如何讓軟體邁向可維護性的目標? Chapter 09:應用程式組裝 組裝是有什麼好談的? 透過純程式碼組裝 透過Spring的類別路徑掃描功能來組裝 透過Spring的Java Config來組裝 如何讓軟體邁向可維護性的目標? Chapter 10:強化架構中的邊界 邊界與依賴關係 存取修飾子 編譯後檢查 建置成品 如何讓軟體邁向可維護性的目標? Chapter 11:理性看待偷吃步 偷吃步的破窗效應 第一步的重要性 在使用案例之間共用模型 把領域實體當成輸出或輸入模型 省略輸入轉接埠 省略應用服務 如何讓軟體邁向可維護性的目標? Chapter 12:選擇你的架構風格 領域為王(Domain is King) 經驗為后(Experience is Queen) 視情況而定(It depends...)