dayatang/dddlib:DDD領域驅動設計庫
DDDLib是一個領域驅動設計(Domain Driven Design,簡稱DDD)類庫,它的目的是:
- 為基於DDD的開發正規化提供基本的介面和抽象,實現一致性。
- 支援業務程式碼和技術程式碼分離。使領域層程式碼純粹表達業務概念和業務規則,將具體技術隔離出去。
- 隔離業務程式碼對對IoC容器和持久化框架等等基礎設施的依賴。可以自由切換IoC容器(Spring、Guice、TapestryIoC等)和持久化框架(JPA,Hibernate等)的實現。
- 減輕開發人員的工作負擔,降低開發人員的“概念重量”。絕大多數開發人員只需要瞭解dddlib-domain模組,而且只需要瞭解dddlib-domain中的幾個類:Entity、EntityRepository、InstanceFactory和四種查詢物件。
- 提供程式設計中經常用到的工具,例如Excel匯入匯出、系統配置、規則引擎封裝,等等。
模組結構
DDDLib是一個多模組Maven專案,一共有十多個模組,可以粗略劃分為核心模組、IoC模組、持久化模組和外圍模組三大類。使用者專案編碼時需要直接依賴核心模組,在部署時選定一個IoC模組和一個持久化模組,如果有必要時可以選用一些外圍模組。對於專案中的大部分開發人員,都只需要瞭解核心模組dddlib-domain,甚至只是dddlib-domain中的少數的幾個介面和類,所以可以大大降低“概念重量”。
核心模組
- dddlib-domain:整個DDDLib的核心。在使用者專案中作為編譯時依賴存在,就是說,使用者專案在編碼時要實現、繼承或使用dddlib-domain中的介面和類。
IoC模組
- dddlib-ioc-spring:實現對Spring Ioc容器的封裝,為使用者專案提供依賴注入能力。在使用者專案中作為可選的執行時依賴存在,使用者專案在編碼時不需要實現、繼承或使用dddlib-ioc-spring中的介面和類。
- dddlib-ioc-guice:實現Google Guice IoC容器的封裝,為使用者專案提供依賴注入能力。在使用者專案中作為可選的執行時依賴存在,使用者專案在編碼時不需要實現、繼承或使用dddlib-ioc-spring中的介面和類。
- dddlib-ioc-tapestry:實現TapestryIoC容器的封裝,為使用者專案提供依賴注入能力。在使用者專案中作為可選的執行時依賴存在,使用者專案在編碼時不需要實現、繼承或使用dddlib-ioc-tapestry中的介面和類。
持久化模組
dddlib-persistence是持久化模組。它包含下面三個子模組:
- dddlib-persistence-jpa:使用JPA作為後端的持久化實現技術,為使用者專案提供持久化能力。在使用者專案中作為可選的執行時依賴存在,使用者專案在編碼時不需要實現、繼承或使用dddlib-persistence-jpa中的介面和類。
- dddlib-persistence-hibernate:使用Hibernate作為後端持久化技術,為使用者專案提供持久化能力。在使用者專案中作為可選的執行時依賴存在,使用者專案在編碼時不需要實現、繼承或使用dddlib-persistence-hibernate中的介面和類。
- dddlib-persistence-test:一個測試模組,為其餘的持久化模組提供測試支援。
下面的模組與持久化有關,但作為頂級的模組存在:
- dddlib-query-channel:查詢通道模組,為分頁查詢提供擴充套件的功能。如果使用者專案需要使用此功能,必須把該模組新增為編譯時依賴。
外圍模組
- dddlib-utils:通用工具類模組。提供各種方便的工具類來操作JavaBean、陣列、集合、日期、日誌等等。其中最重要的一個類是斷言類Assert。可以使用Assert進行防禦式程式設計,提高系統的健壯性和可靠性。本模組為dddlib-domain所依賴,因此使用者專案對該模組有編譯時依賴。
- dddlib-configuration:為從各種來源讀取鍵值型配置資訊提供統一的介面和實現類。目前提供了能夠從以下各種來源讀取配置資訊的實現類:檔案系統檔案、類路徑檔案、資料庫、遠端url等等。除了URL形式的實現是隻讀的之外,其他實現都是可讀寫的,能夠把修改後的配置資料寫回其來源中。
- dddlib-cache:快取模組。為使用者系統提供告訴快取支援。目前採用memcached實現,將來將劃分為一個公共的API模組和幾個實現模組,不同的實現模組採用不同的快取技術實現,如memcached、redis、ehcache等。
- dddlib-datasource-monitor:資料來源監控模組。可以監控資料來源的執行狀態。
- dddlib-datasource-router:資料來源路由模組。主要為SaaS應用服務,將不同的租戶的資料庫訪問路由到不同的伺服器或資料庫。本模組特別為MySQL進行了最佳化,除了實現資料庫路由之外還實現了讀寫分離。
- dddlib-datasource-saas:新版本的SaaS資料來源,將不同的租戶的資料庫訪問路由到其專有的資料庫。可以採用多種路由策略(例如例如不同的租戶的資料庫擁有不同ip、不同埠、不同的資料庫名稱、不同的例項、不同的jndi,等等)。支援各種各樣的資料庫伺服器以及各種各樣的資料庫連線池。
- dddlib-db:為資料庫訪問提供專門的工具類,包括BTM事務管理器、DBUnit、MySQL和Oracle資料庫管理器等等。本模組主要為資料庫整合測試提供支援。
- dddlib-excel:為讀寫Excel檔案內容提供支援。採用Apache POI技術實現,支援.xls和.xlsx兩種格式的Excel檔案。
- dddlib-i18n:為國際化和本地化提供支援。
- dddlib-observer:在實體層面實現觀察者模式實現。當一個實體發生某些事件時向註冊的觀察者實體傳送通知。
- dddlib-rule-engine:為有狀態和無狀態規則服務提供介面和實現。實現是基於規則引擎規範jsr94的。
使用範例
github上的專案hrm-demo是一個使用DDDLib的範例專案。
相關文章
- DDD領域驅動設計:領域事件事件
- 淺談DDD(領域驅動設計)
- 淺談 DDD 領域驅動設計
- DDD-領域驅動設計示例
- 領域驅動設計 (DDD) 簡介 - jannikwempe
- 領域驅動設計(DDD)入門&概要
- 領域驅動設計DDD應用心得
- 領域驅動設計(DDD)實踐之路(一)
- 領域驅動設計(DDD)高手養成記
- 領域驅動設計(DDD:Domain-Driven Design)AI
- 領域模型驅動設計(DDD)之模型提煉模型
- 領域驅動設計(DDD)實踐之路(二):事件驅動與CQRS事件
- 領域驅動設計(DDD:Domain-Driven Design)轉AI
- DDD領域驅動設計初探(5):AutoMapper使用APP
- DDD領域驅動設計初探(7):Web層的搭建Web
- DDD(Domain Driver Designer) 領域驅動設計簡介AI
- 領域驅動設計(DDD)中模型的重要性 - Jeronimo模型
- 去哪兒網領域驅動設計(DDD)實踐之路
- DDD領域驅動設計初探(3):倉儲Repository(下)
- DDD領域驅動設計初探(2):倉儲Repository(上)
- 實戰DDD(Domain-Driven Design領域驅動設計)AI
- 用 F#和EventStore實現DDD領域驅動設計
- 行為驅動開發(BDD)如何與領域驅動設計(DDD)結合?
- 什麼是DDD領域驅動設計的統一語言?
- 領域驅動設計DDD和CQRS架構模式落地實踐架構模式
- 一張圖解釋DDD領域驅動設計的戰術概念圖解
- DDD領域驅動設計總結和C#程式碼示例C#
- ABP與DDD領域驅動關係
- 理解領域驅動設計
- MasaFramework -- 領域驅動設計Framework
- 領域驅動設計示例
- 讀《實戰DDD(Domain-Driven Design領域驅動設計:Evans DDD)》想到的AI
- Java開發架構篇《初識領域驅動設計DDD落地》Java架構
- Java開發架構篇:初識領域驅動設計DDD落地Java架構
- DDD領域驅動設計架構模式:防腐層(Anti-corruption layer)架構模式
- <ddd--領域驅動設計學習>討論--------倉儲
- 領域驅動設計DDD不具備大規模落地的條件!
- 領域驅動設計戰術模式--領域事件模式事件