首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AggregateRoot与儿童

AggregateRoot与儿童
EN

Stack Overflow用户
提问于 2017-01-31 10:06:23
回答 3查看 346关注 0票数 1

儿童AggregateRoots的一个方面对我来说并不是百分之百清楚。我也没有通过谷歌找到完整的例子。

假设我有一个AggregateRoot“客户”。客户可以拥有多个项目。

我已经了解到,我只有一个AggregateRoot“客户”和项目是没有根,到目前为止还不错。

代码语言:javascript
复制
public class Customer : AggregateRoot
{
    private List<Project> _projects { get;set; }

    public void AddProject(Guid id, string name, int budget)
    {
        ?
    }
}

我有几个小问题。

  1. Project是聚合(只是没有根)还是POCO类?
    • 对于应用状态和在事件存储中保存什么非常重要。

  1. 我有一个业务规则,即每个客户的项目都有一个独特的名称。
    • 在客户内部还是项目内部,这条业务规则在哪里?

  1. 我的命令名为"AddProject“并存在于客户名称空间中还是"CreateProject”中,并且存在于项目名称空间中,然后在后台加载客户聚合并在客户聚合上执行"AddProject“?

亲切的问候

EN

回答 3

Stack Overflow用户

发布于 2017-01-31 12:10:17

Project是聚合(只是没有根)还是POCO类?

当您在添加一个ID时,它看起来就像一个实体。

我有一个业务规则,即每个客户的项目都有一个独特的名称。在客户内部还是项目内部,这条业务规则在哪里?

聚合的存在是为了在其内部强制一致性和不变量,因此每个客户的唯一性概念必须存在于Customer中。当有人试图向Project添加Customer时,需要强制执行这个规则,而且只有Customer知道它有哪些其他项目。

我的命令名为"AddProject“并存在于客户名称空间中,还是"CreateProject”,并存在于项目名称空间中?

与上面一样,这个逻辑需要驻留在Customer中,以便对项目名称强制执行唯一性的业务规则。

票数 2
EN

Stack Overflow用户

发布于 2017-01-31 13:03:42

Project是聚合(只是没有根)还是POCO类?

它既是一个实体,也是一个波科。POCO仅仅意味着您的类是裸金属C#,而不受数据访问或基础设施库之类的污染。总根也是麻烦事。

Project不是AR,因为它已经生活在客户AR下。

我有一个业务规则,即每个客户的项目都有一个独特的名称。在客户内部还是项目内部,这条业务规则在哪里?

“每个客户”明确表示客户范围内的不变量,因此它涉及客户聚合。在这种情况下,聚合不变量由聚合根类Customer强制执行。

我的命令名为"AddProject“并存在于客户名称空间中还是"CreateProject”,并存在于项目名称空间中,然后在后台加载客户聚合并在客户聚合上执行"AddProject“

首先,不要混淆名称空间和域模型设计。在确定哪个域对象具有哪个方法时,名称起搏并不真正起作用。实际上,看到带有单个名称空间的整个域层是很常见的。

名称空间或多或少是代码组织的模糊反映,不是组织本身的

话虽如此,我已经看到了命令的实现

  • 在域层中

  • 在应用层。

此外,由于命令是每个聚合的,因此为每个聚合添加一个子命名空间是有意义的。

具体来说,这意味着

YourApplication.Application.Commands[.Customer].AddProject

YourApplication.Domain.Commands[.Customer].AddProject

票数 1
EN

Stack Overflow用户

发布于 2017-01-31 10:27:11

聚合根不应该包含另一个聚合根。因此,Project应该只是一个具有客户聚集根的实体。至于规则,显然我会把它放在项目级别,因为为了检查这条规则,您需要访问单个客户内部的其他项目,这不应该是Project实体的责任,因为它不应该“知道”其他实体如何保存或引用该规则。

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

https://stackoverflow.com/questions/41954698

复制
相关文章

相似问题

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