-
物體(Entities)層:主要封裝企業範圍的業務規則,可以認為是程式碼要實現的核心業務規則,比如電商裡涉及到的購物規則。
-
用例(Use Cases)層:主要封裝特定於應用的業務規則,比如電商裡普通使用者購物與管理員管理貨物資訊,二者所涉及的用例是不一樣的。
-
介面適配(Interface Adapters)層:主要包含各種配接器,負責把從物體層和用例層流出來的資料轉換成為更外面一層需要的資料格式(比如轉換成為適合資料庫儲存的格式,或者適合 Web 頁面展示的格式)。
-
框架與驅動(Frameworks and Drivers)層:這是最外面的一層,是很多工具(或庫)的具體實現細節所在層,比如 Web 框架(考慮一個應用可以做成網頁版應用,也可以做成單機版應用)、資料庫工具包(考慮各種 ORM 的實現,以及各種資料庫的驅動依賴包實現)等。
-
就像前面描述的,架構存在的主要意義是為瞭解決某個業務問題,最終都可以對應到某個具體的技術方案;換句話說,世上沒有通用的架構方案,只有適合某個業務難題或某個領域難題的架構方案。面對架構的問題,我們不能生搬硬套,如果想得到適用的架構,必須要深入瞭解業務的細節,唯一的捷徑是承認這個事實,沒有其他捷徑。
-
在把握了業務的所有細節後,接下來做的一件事情是解耦,把業務細節分類分組,拆分成不同的模組,繼而放到不同的層裡。
-
定義好了模組的邊界和不同層的邊界,接下來就可以派發工作了。有了詳細完整的架構設計,大家協同開發也變得簡單順利;首先大家溝通的時候能夠十分清楚彼此要表達的問題細節,其次各個模組開發完到功能對接的時候彼此也能快速理清楚關註的點(比如必須要實現哪些個方法、函式或介面)。
-
最後在大家的共同努力下,專案終於完成了,但是不要以為到此結束。根據實踐經驗來看,所有的專案都會有新需求,或需求更改,這個時候很大機率會對原有的架構造成衝擊。架構上該如何應對呢?理論上只要業務沒有徹底改變,在原有的架構上做調整就可以滿足需求了。因此原有架構的資料(所有圖文檔案、音影片等)就變得很重要,甚至一些決策的細節參考標準有時候也能起到關鍵的作用(寫檔案是給架構方案添磚加瓦的一種方式)。