首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DDD:如何使用领域驱动的设计来解决这个问题?

DDD:如何使用领域驱动的设计来解决这个问题?
EN

Stack Overflow用户
提问于 2017-08-18 00:58:14
回答 2查看 602关注 0票数 0

我对DDD很陌生,并且在下面的练习中割断我的牙齿。用例是真实的,但是我用DDD解决它的尝试完全是为了学习。

我们有多个Git repos,每个Git repos包含一个我们称之为产品规范的文件。系统需要通过克隆所有repos来响应HTTP,然后更新与POST正文中某些信息匹配的产品规范。系统还需要记录POST请求,作为更新产品规范的原因。

我想使用聚合和事件源来解决这个问题,因为它们看起来很合适。事件源伴随着命令的自动持久性,因此,如果我将POST正文转换为命令,我将得到免费的审核。

问题是,该职位可能符合多个产品规格。我不知道该怎么处理。我是否应该创建一个域服务,让它找到所有匹配的产品规范,然后向每个人发出一个更新命令?还是应该让聚合根这样做呢?如果使用聚合根更新多个实体,那么它本身需要是一个实体,那么它在我的问题域中会是什么呢?

EN

回答 2

Stack Overflow用户

发布于 2017-08-31 19:15:44

对你的问题的第一个评论是正确的(@VoiceOfUnreason中的一个):这‘主要是副作用协调’。但我将尝试回答您的问题:如何使用DDD /解决这个问题:

  1. 第一个聚合根可以被命名为:'MultipleRepoOperations‘。这个聚合根只有一个事件流。
  2. 激发整个进程的命令可以是:'CloneAndUpdateProdSpecRepos‘,它包含要克隆和更新的所有repos的列表。
  3. 当聚合根处理命令时,它只会吐出一堆'UserRequestedToCloneAndUpdateProdSpec‘类型的事件
  4. 第二个有界上下文管理所有的repos,它订阅了来自'MultipleRepoOperations‘的所有事件,并将接收它发出的每个事件。这个有界的上下文聚合根可以被称为:'GitRepoManagement',并且每个回购都有一个流。例如: GitRepoManagement-Repo1,GitRepoManagement-Repo215,GitRepoManagement-20158等等。
  5. “GitRepoManagement”接收'UserRequestedToCloneAndUpdateProdSpec‘类型的每个事件,重放其相应的回购流以重新补充当前状态,然后尝试克隆和更新回购的产品规范。失败时,发出失败的事件;如果批准,则发出失败的事件。
票数 1
EN

Stack Overflow用户

发布于 2017-08-18 07:28:41

为了学习的目的,尝试选择有更复杂的规则和逻辑的问题域,在那里需要很多操作。例如,小游戏(纸牌游戏、多人问答游戏或其他游戏)。或者模拟一些真实世界的过程,比如学校管理或一些业务流程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45746966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档