分层领域模型解读

引言

最近在开发项目的时候碰到了领域模型,但是并没有对其中的各层关系以及各层传递数据方式理解清晰。在此记录下分层领域模型数据的传递过程

所谓领域模型

所谓领域模型,其实就是C++类,再详细一点就是有作用范围的实体类。

其核心目标是业务抽象:将现实业务中的实体、流程和规则转化为可被代码理解和操作的结构。

其中的领域对象描述是这样的:

  • DO(Data Object):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。
  • DTO(Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。
  • BO(Business Object):业务对象,可以由 Service 层输出的封装业务逻辑的对象。
  • Query:数据查询对象,各层接收上层的查询请求。
  • VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。

img

举个栗子

订单领域模型

1
2
3
4
5
6
7
聚合根:Order(订单)

- 实体:OrderItem(订单项)
- 值对象:Address(配送地址)
- 领域服务:OrderService(处理订单创建、取消)
- 领域事件:OrderCreatedEvent(订单创建事件)
- 仓储:OrderRepository(持久化订单)

很明显可以看出领域模型与数据模型不同,领域模型的代码直接反映业务概念,领域模型关注行为,而数据模型关注存储。领域模型的业务逻辑独立于基础设施,每个微服务对应一个限界上下文,领域模型帮助定义服务边界。最重要的是有限界上下文,要明白模型的边界。而且领域模型也不等同于数据库表,模型可以随业务需求演进,而非受限于数据库结构。

总结

领域模型是以业务为核心的设计方法,通过抽象关键概念、规则和交互,帮助开发者构建灵活、可维护的系统。它不仅是技术工具,更是一种思维方式,强调从业务视角出发解决问题。