我知道有一百万个这样的问题。对不起。我认为我的不一样,但似乎并非如此。我是 DDD 的新手,并试图掌握它。我的部分域是这样的。位置 1-* 字段 字段 1-* 事件字段 1-* 任务 任务-员工
现在看来,AR 就是位置。如果我想获得一项特定的任务,我将不得不通过字段集合遍历任务集合中的任务。
这听起来很费力,因为我经常处理任务和事件,而且几乎从来没有一个位置。该位置用于隔离一组字段及其对应的实体。所以在 ui 中,我可以选择一个位置并获取字段列表。然后我会选择一个领域。从那里我可能会编辑其中一项任务。所以我有一组任务,我选择一个,这样我就有了任务的 ID。然后我需要遍历到 location 并获取他的 ID,这样我才能获取 AR 并遍历回任务。或者更确切地说,我会保留 AR 的 ID,以便我可以得到它。那么我是否也应该保留该字段的 ID?所以我返回到服务器的将是我想要查看的 AR.Id、Field.Id 和 Task.Id?
其次,员工当然不能是实体,它很可能是 AR。AR 上的实体可以拥有 AR 集合吗?
那么它的结构应该是这样的吗?
public class Location // is an aggregate Root
{
public IEnumerable<Field> Fields {get;set;} //in real code encapsulated. not here for brevity
}
public class Field // is an Aggregate Root
{
public Location Location {get;set;} //reference to AR
public IEnumerable<Task> Tasks {get;set;}
public IEnumerable<Events> Events {get;set;}
}
public class Task // is an Aggregate Root
{
public Field Field {get;set;} // reference to AR
public IEnumerable<Employee> Employees {get;set;}
public TaskType TaskType {get;set;} // probably Value Object
public IEnumerable<Equipment> Equipment {get;set;} // maybe Entity or AR
}
这使得处理修改最多的对象和遍历它们的关系变得更加容易,但它也感觉有点像普通的旧 OOP,AR 并没有真正的意义。
再说一次,我是 DDD 的新手,没有人可以通过它来进行健全性检查。请帮助我了解这些边界是如何绘制的,如果是第一种方法,是否有更简单的方法来处理实体,然后携带 AR.id、ParentParent.Id、ParentId 以及最后的对象兴趣实体.Id
感谢您的任何想法