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的。