DDD领域驱动设计实战 - 创建实体身份标识的常用策略(上)

简介: DDD领域驱动设计实战 - 创建实体身份标识的常用策略(上)

从简单到复杂依次为:

3.1.1 用户提供唯一标识

这时用户将输入一些可识别的数值或符号,或从已有标识中选其一,然后创建实体对象。这是一种非常简单方案,但也可能变得复杂。

由于需用户自己生成高质量的标识。所以标识可能唯一,却有可能是不正确的。

缺陷

多数情况下标识不可变,用户无法修改标识。但有时赋予用户修改标识值的权限有好处。

例如,若将Forum和Discussion的名字作为唯一标识,那么发生拼写错误时怎么办,或用户之后想采用新名字怎么办?

  • Forum名字拼写错误,Discussion名字长度小于所要求的
  • image.png
  • 要改变这些标识值需要多大代价?虽然用户提供的身份标识看似一种节约成本的做法,但也有可能不是。此时我们还可以依赖用户来提供唯一的、正确、稳定的对象标识吗?


为避免上述问题,需重新设计。开发需采用无故障的方法来保证用户输入的确是唯一的身份标识。虽然基于工作流的标识审批过程,对于高吞吐量的领域并无多大帮助,但是它对于生成具有可读性的身份标识来说却是必需的。如果这种方式生成的标识会在将来继续使用,而工作流也是可能的,那么添加一个额外的阶段来保证身份标识的质量是值得的。


通常将一些用户输入作为实体属性,这些属性可用于对象匹配,但并不将这样属性作为唯一身份标识。

简单属性可作为实体状态的一部分, 他们更容易修改,在这种情况下,我们需要考虑另外的方法来生成实体的唯一标识。


目录
相关文章
|
2月前
|
存储 测试技术 数据库
仓储设计实现问题之聚合实体在DDD中定义如何解决
仓储设计实现问题之聚合实体在DDD中定义如何解决
38 0
|
3月前
领域驱动设计问题之将多个服务类都直接修改单据实体的状态如何解决
领域驱动设计问题之将多个服务类都直接修改单据实体的状态如何解决
|
3月前
|
项目管理
项目管理定义问题之什么是核心域
项目管理定义问题之什么是核心域
|
3月前
|
架构师 测试技术 领域建模
项目管理问题之实体、命令、事件之间有什么关系
项目管理问题之实体、命令、事件之间有什么关系
|
设计模式 搜索推荐 领域建模
DDD领域驱动设计实战(一)-领域模型、子域、核心域、通用域和支撑域等基本概念
DDD领域驱动设计实战(一)-领域模型、子域、核心域、通用域和支撑域等基本概念
1000 0
|
缓存 Oracle Java
DDD领域驱动设计实战 - 创建实体身份标识的常用策略(下)
DDD领域驱动设计实战 - 创建实体身份标识的常用策略(下)
177 0
DDD领域驱动设计实战 - 创建实体身份标识的常用策略(下)
|
存储 缓存 算法
DDD领域驱动设计实战 - 创建实体身份标识的常用策略(中)
DDD领域驱动设计实战 - 创建实体身份标识的常用策略(中)
268 0