第8章 應用程式架構
之前,介紹了讓團隊可以對問題域的有用概念抽象建模的技術。
不過,這一章將介紹可以在應用程式上下文中利用領域模型的模式,其中考慮到了持久化,展現以及其他技術需求。
應用程式架構
遵循ddd原則開發軟體不需要使用任何特殊的應用程式架構方式,但架構必須支援的一項內容是保持領域邏輯的隔離性。
分離應用程式的問題
應用程式的結構要支援技術複雜性和領域複雜性的分離。
出於不同的原因,應用程式的展現,持久化和領域邏輯問題會以不同速率發生變化;能分離這些問題的架構可以適應變化而不會造成對**庫不相關區域的意外影響。
從領域的複雜性中進行抽象
除了問題的分離,應用程式架構必須通過公開封裝和隱藏低層次領域詳情的粗粒度用例整合從複雜領域的紛亂難點中進行抽象。在較高層次進行抽象可以防止領域邏輯中的變化影響展現層。
分層架構
為了支援問題的分離,可以對應用程式的不同職責進行分層。
許多架構通過將應用程式劃分成一起變化的區域來支援問題分離,包括整潔架構,六角形架構(也稱為埠和介面卡架構),以及洋蔥架構。
依賴倒置
為強制進行問題分離,位於架構中的領域層和應用層不應該依賴任何其他層。所有的依賴關係都是內向的,其中處於應用程式核心的領域層不依賴任何事物,使得它能夠不受干擾地專注於領域問題。應用層僅依賴於領域層,它通過委託給領域層來組織對用例的處理。
領域層領域模型表示了建立來滿足業務用例需求的問題域的概念抽象檢視。
包含抽象模型的領域層不依賴任何其他事物,並且不清楚它所服務的客戶端的技術細節以及保持領域物件的資料儲存。
應用程式服務層
應用程式服務層表示了應用程式的用例和行為。
應用程式服務層使得在不損壞領域層完整性的情況下對完全不同的客戶端的支援成為可能。
基礎架構層
應用程式的基礎架構層就是讓其生效的技術詳情。
跨層通訊
在跨層通訊時,為避免向外界公開領域模型的詳情,請不要跨邊界傳遞領域物件。也不要將外界的非法請求或使用者輸入資料傳送至領域層。要使用簡單的資料傳輸物件dto,展現模型以及應用程式事件物件在領域中就變化和操作進行通訊。
隔離測試
不要在有界上下文之間共享資料結構
除了分離應用程式**中的問題之外,架構還必須包括來自其他應用程式資料請求的領域物件狀態的持久化分離。
以下顯示了共享資料庫和共享結構整合應用程式。
最好不要共享資料庫,應該選擇應用程式或有界上下文資料庫而不是整合資料庫。
就像在領域模型內應用有界上下文一樣,必須對持久化模型進行相同的處理。
這有助於強制客戶端通過精心定義的應用程式服務層整合,從而保護模型的完整性並確保滿足恆定性需求。
應用程式架構與用於有界上下文的架構的對比
下面第一張圖,顯示了由3個有界上下文組成的應用程式;此處展現層包含其專有的應用層以保持與有界上下文保持一致。
第二張圖,相信有界上下文應該擴充套件到展現層。
應用程式服務
應用程式邏輯與領域邏輯的對比
應用程式邏輯包含滿足業務用例所需的工作流步驟。
這些步驟可以包含融合來自乙個資料庫的領域物件,將使用者輸入對映到領域層理解的物件,以及最後委託給領域物件或者其集合以便制定業務決策。
應用程式邏輯完全在於通過委託給領域和基礎架構服務來進行協調和編排。
領域邏輯僅專注於領域規則,概念,資訊和工作流。領域邏輯沒有技術細節,也沒有持久化。
定義和公開能力
由於應用程式服務是系統公開的能力,所以他們不必適應新的客戶端。
相反,像展現層這樣的新客戶端應該遵從服務公開的約定。
業務用例協作
儘管領域模型就其本質來說是物件導向的,但應用程式服務是程式性的,因為它們專注於任務編排而不是對領域邏輯和概念建模。
應用程式服務表示的是用例,而不是建立,讀取,更新和刪除
行為驅動設計(bdd)會幫助你理解應用程式的行為。
有了用bdd捕獲的行為,就可以將在bdd規範中明確表示語言用於應用程式服務用途/用例的名稱。
應用程式服務不是簡單的curd,他們應該揭示使用者意圖並傳達系統的能力。
作為實現詳情的領域層
應用程式服務是強有力的,並且對所有應用程式複雜性都有幫助,它要麼富含邏輯的核心子域,要麼僅僅是用於訪問資料儲存的外觀模式的乙個通用子域。
領域報告
除了協調業務任務,應用程式服務層還需要以報告形式提供關於領域物件狀態的資訊。
讀取模型和事務模型的對比
有時使用者介面會需要跨越許多領域物件的資訊。
應用程式服務融合所有的豐富領域物件僅僅為檢視提供資訊的子集,這樣的做法是低效且成本高昂的。
應用程式客戶端
應用程式服務層客戶端的作用是公開系統的能力。
無論客戶端應用程式是web服務,還是restful等,應用程式都是應該無感知的。
要點彙總
外圍層依賴內部層。內部層會公開外圍層必須遵從和實現的介面。這一依賴倒置形式將保護領域和應用層的完整性。
Android 應用程式架構
android應用程式架構 1 可擴充套件檢視 view 建立應用程式 2 內容管理器 content providers 訪問其他應用程式資料 共享自身資料 3 資源管理器 resource manager 提供非 資源訪問,本地字串 分層檔案 4 通知管理器 notification manag...
spark應用程式的執行架構
spark應用程式的執行架構 幾個基本概念 1 job 包含多個task組成的平行計算,往往由action催生。2 stage job的排程單位。3 task 被送到某個executor上的工作單元。4 taskset 一組關聯的,相互之間沒有shuffle依賴關係的任務組成的任務集。乙個應用程式由...
Spark應用程式的執行架構
1 簡單的說 由driver向集群申請資源,集群分配資源,啟動ex ecutor。driver將spark應用程式的 和檔案傳送給executor。executor上執行task,執行完之後將結果返回給driver或者寫入外界。2 複雜點說 提交應用程式,構建sparkcontext,構建dag圖,...