【发布时间】:2012-02-16 16:11:31
【问题描述】:
涉足领域驱动设计,我遇到了一个关于如何在我的领域模型中识别聚合根的情况。
我有以下三个类,建模一个简单的待办事项:
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; }
}
我可以对模型进行以下说明:
- 更新仅存在于任务的上下文中。
- Task 仅存在于 List 的上下文中。
因此,列表似乎是唯一的聚合根。 (实际上,我的数据访问层只允许加载/保存 List 对象。)但是我看不到如何将我的 Task 类中当前存在的 UI 干净地推送到 List 类。目前我的 List 类正在分发对 Task 对象的引用,允许调用者修改它们。
这是否意味着 Task 也是一个聚合根,即使它的存在依赖于包含的 List?
提前致谢。
【问题讨论】:
-
Vaughn Vernon 有一个关于聚合设计的3 part article,它可能会对您的问题有所启发。 - Iulian Margarintescu
标签: c# domain-driven-design aggregateroot