一、前言 常見的DDD實現架構有很多種,如經典四層架構、六邊形(適配器埠)架構、整潔架構(Clean Architecture)、CQRS架構等。架構無優劣高下之分,只要熟練掌握就都是合適的架構。本文不會逐個去講解這些架構,感興趣的讀者可以自行去瞭解。 本文將帶領大家從日常的三層架構出發,精煉推導 ...
Maven Module,但實際上可以合併到 DAO 層。
2.1 第一步、數據模型與DAO層合併
2.2 第二步、Service層抽取業務邏輯
public class Service {
@Transactional
public void bizLogic(Param param) {
checkParam(param);//校驗不通過則拋出自定義的運行時異常
Data data = new Data();//或者是mapper.queryOne(param);
data.setId(param.getId());
if (condition1 == true) {
biz1 = biz1(param.getProperty1());
data.setProperty1(biz1);
} else {
biz1 = biz11(param.getProperty1());
data.setProperty1(biz1);
}
if (condition2 == true) {
biz2 = biz2(param.getProperty2());
data.setProperty2(biz2);
} else {
biz2 = biz22(param.getProperty2());
data.setProperty2(biz2);
}
//省略一堆set方法
mapper.updateXXXById(data);
}
}
public class Service {
public void bizLogic(Param param) {
//如果校驗不通過,則拋一個運行時異常
checkParam(param);
//載入模型
Domain domain = loadDomain(param);
//調用外部服務取值
SomeValue someValue=this.getSomeValueFromOtherService(param.getProperty2());
//模型自己去做業務邏輯,Service不關心模型內部的業務規則
domain.doBusinessLogic(param.getProperty1(), someValue);
//保存模型
saveDomain(domain);
}
}
2.3 第三步、維護領域對象生命周期
public interface DomainRepository {
void save(AggregateRoot root);
AggregateRoot load(EntityId id);
}
由於數據模型屬於貧血模型,自身沒有業務邏輯,並且只有Repository這個包會用到,因此我們將之合併到Repository中,接下來不再單獨列舉。
2.4 第四步、泛化抽象
-
Infrastructure
註意:Infrastructure 層的門面介面都應先在Domain 層定義,其方法的入參、出參,都應該是領域模型(實體、值對象)或者基本類型。
-
User Interface
-
Application
2.5 第五步、完整的包結構
2.6 精煉後的思考
3.1 Maven Archetype介紹
3.2 ddd-archetype的使用
3.2.1 項目介紹
3.2.2 安裝過程
3.2.3 克隆項目
git clone https://github.com/feiniaojin/ddd-archetype.git
3.2.4 archetype:create-from-project
配置打開IDEA的run/debug configurations視窗,如下:
archetype:create-from-project -Darchetype.properties=archetype.properties
註意,在IDEA中添加的命令預設不需要加mvn
3.2.5 install
ddd-archetype/target/generated-sources/archetype
3.2.6 archetype:crawl
archetype:crawl
3.3 使用ddd-archetype初始化項目
-
創建項目時,點擊manage catalogs: -
將本地的maven私服中的archetype-catalog.xml加入到catalogs中:
4.1 後端
-
Spring Boot -
H2記憶體資料庫 -
Spring Data JDBC
4.2 前端
4.3 運行截圖
-end-
作者|覃玉傑
本文來自博客園,作者:古道輕風,轉載請註明原文鏈接:https://www.cnblogs.com/88223100/p/Hands-teach-you-how-to-land-DDD.html