DDD

用户头像
陈皮
关注
发布于: 2020 年 08 月 12 日

1. 解决的问题

产品领域模型设计。



  • 解决复杂性。

  • 以领域知识为基础,建立通用语言,统一业务、需求、实现业务概念。



2. 概念

2.1 战略设计(业务分析)

2.1.1 领域



组织所做的事情以及其包含的一切,就是组织的业务范围和做事方式,也是软件开发的目标范围。 领域驱动设计就是从领域出发,分析领域内模型及其关系,进而设计软件系统的方法。





2.1.2 子域



在业务复杂的情况下,不能只设计一个领域,会把领域拆分成多个子域,比如用户、订单等。



2.1.3 限界上下文



每一个子域,都有一下概念上的领域边界,在这个边界中,任何领域对象都只表示特定于该边界内部的确切含义。这样的边界称为限界上下文。限界上下文和子域具有一对一的关系,用来控制子域的边界,保证子域内的概念统一性。



通常一个限界上下文或者说一个子域对应一个组件或者一个模块,或者一个微服务,一个子系统。



不同的限界上下文之间会有各种的交互合作。DDD 使用上下文映射图来设计这种关联和交互。



2.2 战术设计(代码设计)

现实中流行的是 mvc 分层模式(可以称为事务脚本)



  • 实体只是数据库表的映射。

  • dao 封装对数据库层面的操作。

  • 业务逻辑集中在 service 层。

  • controller 层对外暴露接口。



2.2.1 实体



领域模型对象也被称为实体,每个实体都是唯一的,具有唯一标识。



实体设计是 DDD 的核心,首先通过业务分析,识别出实体对象,然后通过相关的业务逻辑设计实体的属性和方法。



2.2.2 值对象



在实体的生命周期中,不会发生改变的一组相关概念可以设计成值对象。



2.2.3 聚合



聚合是一个关联对象的集合,我们将其做为一个单元来处理数据更改。每个集合都有一个根和一个边界。



聚合根:将多个实体和值对象聚合在一起的实体。



参考

Eventuate Core



发布于: 2020 年 08 月 12 日 阅读数: 32
用户头像

陈皮

关注

还未添加个人签名 2018.04.26 加入

还未添加个人简介

评论

发布
暂无评论
DDD