涉及域驱动设计,我遇到了如何在我的域模型中识别聚合根的情况。
我有以下三个类,为简单的待办事项列表建模:
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?
提前致谢。
答案 0 :(得分:0)
在我看来,在这种情况下,您可以汇总1或2。这完全取决于您在列表中的任务是否很大。以及您的更新是否很大。
如果任务或更新不会增加太多,则汇总SELECT a.*
FROM Assignment a JOIN
Detail d
ON a.ID = d.AssignmentID
WHERE a.Class = 'GC' AND
d.MondayOfWeekDate > '2018-03-26' AND
d.Percent < 100;
就可以了。
否则,您可以将它们分为两个聚合root(List)
,其中root(List, Task)
可以添加List
,而Task
可以添加Task
。
答案 1 :(得分:0)
我认为识别聚合的最佳方法是 event storming 或 user story mapping。