当前位置:  开发笔记 > 程序员 > 正文

如何在DDD中建模实体的当前状态

如何解决《如何在DDD中建模实体的当前状态》经验,为你挑选了1个好方法。

我正在努力掌握DDD背后的想法并将它们应用到我们拥有的宠物项目中,我有一些问题,我希望这里的某个人能够回答.

该项目是一个文件管理系统.我们遇到的特殊问题是我们的系统处理的两个概念:a Document和a的概念DocumentStatus.

A Document有许多属性(例如标题,作者等).用户可以Document在其生命周期内更改任何属性.

一个Document可能是,在任何时候,是在一个特定的状态,例如NEW,UNDER_REVISION,REVISED,APPROVED等等.对于每个我们需要知道谁作出修改,以该国国家.

我们需要能够根据文档状态查询系统.示例查询将是"获取REVISED状态中的所有文档".

"获取用户X已更改其状态的所有文档"

在同一事务中a Document和a DocumentStatus需要更改的唯一时间Document是创建(创建文档并同时为其分配状态NEW).

对于所有其他时间,该UI允许无论是更新而不是两个(即你可以更改文件的属性,如作者,而不是它的状态.),也可以更新其状态(从NEWUNDER_REVISION),而不是它的属性.

我认为我们可以安全地认为a Document是实体和聚合根.

我们被重温了DocumentStatus.一种选择是使其成为Document聚合的值对象部分.

另一种选择是使其成为实体并成为其自身聚合的根.

我们还想提及我们在各种DDD文档中描述的CQRS,但我们认为这太麻烦了,特别是考虑到我们需要对其执行查询DocumentStatus.

任何指针或想法都会受到欢迎.



1> theDmi..:

您说您需要能够查看过去的状态更改,因此状态历史记录将成为域概念.那么一个简单的解决方案如下:

StatusHistoryDocument实体内定义一个.

StatusHistory是一个StatusUpdate值对象列表.

StatusHistory始终反映当前状态的第一个元素- 确保StatusUpdate在创建Document实体时将初始状态添加为值对象.

根据状态历史记录需要多少额外逻辑,请考虑为历史记录本身创建专用值对象(甚至实体).

坚持

您并没有真正说出持久层的外观,但我认为StatusHistory应该可以使用每个持久性机制创建针对列表的第一个元素的查询.例如,使用map-reduce数据存储创建一个索引的视图,Document.StatusHistory[0]并使用该视图来实现所需的查询.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有