另外, 為了能讓大家對我有一個更加具體的瞭解, 我也特地按照flyzb的思想設計了一個基於領域事件和DDD的架構.
該架構的核心思想是:
1. 領域模型好比是一個實心的圓球,圓球的表層就是領域服務(Domain Service),圓球內部由各個相互平等的,沒有相互依賴的,通過事件訊息完成相互協作的領域物件組成;
2. 領域模型應該依賴於一箇中央事件處理器,該處理器負責統一協調領域模型的各種動作;具體地說就是該處理器能夠智慧的知道任何一個領域事件該如何處理,也就是說它知道該呼叫哪些事件響應者完成各自的響應;
3. 關於領域服務,應該是非常薄的一層,它的職責非常簡單,就是生成領域事件,然後讓事件處理器去釋出領域事件,僅此而已;
4. 關於領域物件,每個領域物件主要做兩件事情:一:在需要的時候生成領域事件,然後讓事件處理器釋出該領域事件;二:響應並處理一些它所關心並能單獨處理的領域事件;
5. 領域模型應該處在正在應用的中心位置,因為它包含了整個應用的所有業務邏輯,包括流程控制邏輯和業務邏輯。任何其他的東西比如資料持久層、應用層、表現層都只是一些輔助的東西。比如資料持久層只是用來將領域模型的任何修改持久化到某種資料儲存介質如資料庫,應用層只是用來將領域模型做進一步封裝(Facade),它提供面向使用者操作的各種應用介面供表現層使用,應用層中所有介面可以分為兩類:1)呼叫領域模型實現,一般是行為型操作(ADD、Update、Delete、或其任意組合);2)呼叫查詢服務(該查詢服務完全和領域模型無關)提供各種查詢功能;也就是說在我看來我們應該應用CQRS的思想來實現應用層。最後,表現層其實和領域模型沒有任何關係,它應該需要使用應用層即可。
總結:基於上面的思想,一個完整的領域模型由三個要素組成:領域服務+領域物件+領域事件。然後,為了能讓這三個要素能協調工作,還需要藉助一箇中央事件處理器來完成統一協調的工作。另外,領域模型處於整個應用的中心,其他任何東西都只是作為輔助產品將該中心從各種角度進行擴充套件以滿足使用者需要;或者實現持久化目的,以便整個領域模型的狀態可以被儲存和恢復。
架構原始碼為:
http://files.cnblogs.com/netfocus/EventBasedDDDExample.rar
希望能得到大家的意見和建議.
相關文章
- 為了感謝flyzb的思想給我的幫助, 我特定整理了一些他的大部分我覺得重要的思想. 分享給大家.
- 為了落地DDD,我是這樣“PUA”大家的
- 大家好,有對基於Onethink框架設計一個網上商城瞭解的嗎框架
- 我就差一個程式設計師了!程式設計師
- 關於如何設計一個基於事件驅動架構的思考事件架構
- 為了提高軟體的開發的效率,我一個提議
- 基於DDD領域建模思想、COLA開源架構和CQRS模式設計和構建貨物運輸系統架構模式
- 這個 bug 讓我更加理解 Spring 單例了Spring單例
- 一個Bug,讓我發現了 Java 界的.AJ(錐)!Java
- 面試了一個 39 歲程式設計師,我有點慌……面試程式設計師
- 怎麼說服領導,能讓我用DDD架構肝專案?架構
- 我寫了一個從DATASOURCE取得CONNECTION的工具類,大家看看
- 風變程式設計,讓我的有了不一樣的人生風景程式設計
- 一位設計師的自白:我為什麼一個月就離開了蘋果?蘋果
- DDD領域驅動設計:領域事件事件
- 我對軟體架構的一些看法和思考架構
- 迫於失業,寫了一個讓我覺得很爽的 AlfredWorkFlow(我暫時還沒見到更爽的Alfred
- 我好像發現了一個Go的Bug?Go
- 面試了一個 39 歲程式設計師後,我被罵了……面試程式設計師
- 關於領域驅動設計,大家都理解錯了
- 我們正處於雲端計算領域一個非常關鍵的節點
- 我決不黑微軟。。也不知你說的對不對?大家來點有思想高度的分析微軟
- 我寫了一個面向原始碼閱讀者的 UI 框架(基於 Vue)原始碼UI框架Vue
- 我就差一個程式設計的程式設計
- 基於阿里開源的COLA架構和DDD領域驅動設計構建貨物運輸系統阿里架構
- 為了收集和整理程式設計的常用單詞,我寫了個背單詞應用程式設計
- 15K程式設計師做的小玩意,就是一個爬蟲案例,但是為啥我看完也會了!程式設計師爬蟲
- 接手了一個外包開發的專案,我感覺我的頭快要裂開了~
- 基於Maven的SSM總體架構設計(一)MavenSSM架構
- 結婚養幾個孩子是如何讓我成為一個更好的程式設計師的程式設計師
- 結婚生子讓我成為一個更優秀的程式設計師程式設計師
- 我編了一個簡單程式(●'◡'●)
- 因為 GitHub Actions 我發現了 Jake Wharton 的一個倉庫Github
- 一張圖解釋DDD領域驅動設計的戰術概念圖解
- 一條sql瞭解MYSQL的架構設計MySql架構
- 一條 sql 瞭解 MYSQL 的架構設計MySql架構
- 面對物件是一種軟體設計思想,和具體的實現無關物件
- 我終於統一了團隊的技術方案設計模板