dayatang/dddlib:DDD領域驅動設計庫

banq發表於2022-07-22

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的範例專案。
 

相關文章