使用微服务时的步骤向导UI

时间:2017-03-01 10:41:00

标签: c# architecture domain-driven-design actor azure-service-fabric

我的系统包含customer实体和user实体。

Customer是一个付钱的人。每个客户包含1-N个用户。客户有指向用户的链接。

没有客户,

User就不存在。用户实体包含CustomerId。

问题是我被限制使用特定的UI来创建客户。客户创建过程包括UI中的两个步骤:

  • 填写有关客户的信息:名字,姓氏,地址等
  • 第二步为客户创建用户。

主要思想是在第2步结束时创建客户和用户。如果我可以将两个entite存储在同一个DB中,那将很简单。我可以在一次ACID交易中完成。它会节省全部或全部。

不幸的是,我使用微服务 - 客户和用户是具有自己存储的不同微服务。并且这两个存储都不是数据库 - 存储没有事务选项。因此Customer实体使用存储1,而User实体使用存储2.

我建议在第一步后保存客户。然后在第二步后保存用户。但是在第二个UI步骤中有一个取消按钮,它应该删除在整个过程中创建的所有用户和客户。建议被拒绝了。 问题是,如果具有特定用户名的用户已经存在,我不应该既不保存客户也不保存用户。

我的问题是:

  • 我有多少RootAgregates?一两个?
  • 将用户存储在与客户存储不同的存储中是否正确?
  • 在这种情况下,什么是正确的方法?

P.S。我不喜欢在用户中保存用户的想法。如果是用户,我需要与客户合作。另一个问题是我需要用户在整个系统中是唯一的,并且需要获得所有用户的列表。

P.S。我使用Azure Service Fabric和Actors模型。

1 个答案:

答案 0 :(得分:1)

  

我有多少RootAgregates?一两个?

  • 您有一个聚合根和一个实体。
  

将用户存储在不同的存储空间中是否是正确的方法   客户存储?

  • 不,不是。因为每个聚合都应该有一个存储库。

请查看Effective Aggregate Design by Vaughn Vernon有关如何设计聚合的信息。