C# 如何在域模型中识别聚合根?

C# 如何在域模型中识别聚合根?,c#,domain-driven-design,aggregateroot,C#,Domain Driven Design,Aggregateroot,涉猎领域驱动设计时,我遇到了一个关于如何在我的领域模型中识别聚合根的情况 我有以下三个课程,模拟一个简单的待办事项列表: public class List { private IList<Task> _tasks; public List() { ... } public string Name { get; set; } } public IEnumerable<Task> Tasks() { ... } public vo

涉猎领域驱动设计时,我遇到了一个关于如何在我的领域模型中识别聚合根的情况

我有以下三个课程,模拟一个简单的待办事项列表:

public class List {
    private IList<Task> _tasks;

    public List() { ... }
    public string Name { get;  set; } }
    public IEnumerable<Task> Tasks() { ... }
    public void AddTask(string descr) { ... }
    public void RemoveTask(Task t) { ... }
    public Task GetRandomTask() { ... }
}

public class Task {
    private IList<Update> _updates;

    public Task(string descr) { ... }

    public string Description { get; }
    public bool IsClosed { get; }
    public IEnumerable<Update> Updates() { ... }
    public void AddUpdate(string descr, bool close) { ... }
}

public class Update {
    public Update(string descr) { ... }
    public string Description { get; }
}
公共类列表{
私人IList_任务;
公共列表(){…}
公共字符串名称{get;set;}}
公共IEnumerable任务(){…}
public void AddTask(字符串描述){…}
公共void RemoveTask(任务t){…}
公共任务GetRandomTask(){…}
}
公开课任务{
私有IList_更新;
公共任务(字符串描述){…}
公共字符串描述{get;}
公共图书馆已关闭{get;}
公共IEnumerable更新(){…}
public void AddUpdate(string descr,bool close){…}
}
公共类更新{
公共更新(字符串描述){…}
公共字符串描述{get;}
}
我可以就模型说明以下内容:

  • 更新仅存在于任务的上下文中
  • 任务仅存在于列表的上下文中
  • 因此,List似乎是唯一的聚合根。(事实上,我的数据访问层只允许加载/保存列表对象。)但我看不出如何将当前存在于任务类上的UI干净地推送到列表类上。目前,我的List类正在分发对任务对象的引用,允许调用方修改它们

    这是否意味着任务也是聚合根,即使它的存在依赖于包含列表


    提前感谢。

    在我看来,在这种情况下,您可以有1个或2个聚合。这完全取决于你在列表中的任务是否很大;以及您的更新是否会很大

    如果任务或更新不会大量增加,那么一个聚合
    根目录(列表)
    就可以了


    否则,您可以将它们分为两个聚合
    root(列表,任务)
    其中
    列表
    可以添加
    任务
    任务
    可以添加
    更新

    我认为识别聚合的最佳方法是或。

    相关问题:。沃恩·弗农有一个关于聚合的设计,可能会对您的问题有所帮助-