「目前為止,所有建議無疑將幫助你設計出更好的軟體,這些軟體是由具有明確邊界、職責、依賴關係受控的元件所組成。本章的重點是要強調,如果不考慮實作策略的錯綜複雜,那麼你最佳的設計意圖可能會付之一炬」
「想想要如何將你的設計對應到程式碼結構、如何組織程式碼以及在 Runtime & Compile 時期應用哪些解耦模式、在適用的情況下保留選項」
「記得要務實些,要考慮到團隊的規模、技術水平以及解決方案的複雜性和時間及預算的限制,並且要注意其他區域(例如資料模型)中的耦合。魔鬼就藏在實作細節中」
取自: Clean Architecture (p.250 & p.264)
讓我們暫時先把「整潔的架構」放在一邊,來看看幾種設計和組織程式碼的方法:
水平橫向分層架構 (Horizontal Layered Architecture)
最簡單的一種設計方法,依據技術角度將程式碼水平分層。這些層被用來分類相似型態的東西,層應該只依賴於相鄰的層
書中圖例:
說明
分析
垂直切片劃分 (Vertical Slicing)
書中圖例:
分析
「在我看來,兩者都不是最理想的選擇」
取自: Clean Architecture (p.252)
以業務/領域為中心的程式碼
這樣的程式碼庫是由「內部 (Domain)」和「外部 (Infrastructure)」所組成,外部一定要依賴於內部,不會有其他的依賴方式。這種組織原始碼的方式也是一種可行的方法
書中圖例:
分析
基於元件的架構 (Component Based Architecture)
這是一種混合式方法,目標是將『與單個粗粒度 (Coarse-grained) 有關的所有責任』Bunddle 到單一的 Package 中。這是以服務 (Service) 為中心的軟體系統觀點
書中圖例:
分析
[補充]: C4 Software Architecture Model