1. 分层领域模型入门:为什么需要分层?
在软件开发中,我们经常听到"分层"这个概念。想象一下你正在整理一个杂乱无章的仓库——如果不进行分类,所有东西都堆在一起,找起来会非常困难。分层领域模型就像是给代码仓库做分类整理,让不同职责的对象各司其职。
我第一次接触分层概念是在一个电商项目重构时。当时的代码中,数据库表结构直接暴露给前端,任何字段变动都会引发连锁反应。这让我深刻理解了Martin Fowler说的:"任何足够复杂的程序都会包含一个临时开发的、不规范定义的、充满bug的、运行缓慢的、只有一半功能的特定领域语言实现。"
分层模型的核心价值在于:
- 解耦:各层只关注自己的职责
- 复用:业务逻辑不依赖具体实现
- 可维护性:变更影响范围可控
- 可测试性:各层可以独立测试
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心模型详解:DO/BO/DTO/VO/Query
2.1 数据对象(DO)——数据库的镜像
DO(Data Object)是直接映射数据库表的对象。在我的实践中,DO应该保持最简形式:
java复制public class UserDO {
private Long id;
private String username;
private String passwordHash;
private LocalDateTime createTime;
// 只有getter/setter
}
关键原则:
- 字段与表字段严格对应
- 不包含业务逻辑
- 通常由MyBatis等ORM框架自动生成
- 只在数据访问层使用
注意:避免在DO中添加业务方法,这会导致数据层与业务层耦合
2.2 业务对象(BO)——领域核心
BO(Business Object)承载核心业务逻辑。在电商系统中,一个典型的购物车BO可能是这样的:
java复制public class ShoppingCartBO {
private List<CartItem> items;
private User buyer;
public BigDecimal calculateTotal() {
return items.stream()
.map(item -> item.getPrice().multiply(item.getQuantity()))
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
public void applyCoupon(Coupon coupon) {
// 复杂的优惠券应用逻辑
}
}
BO的特点:
- 包含状态和行为
- 实现核心业务规则
- 不关心持久化细节
- 可跨多个DO构建
2.3 数据传输对象(DTO)——服务间通信
DTO(Data
