【发布时间】:2021-05-30 13:26:54
【问题描述】:
我正在创建一个域是文件系统的系统。有目录和文档等实体。每个文档必须存在于某个目录中,并且每个目录都有一个父目录(不包括根目录)。为这个系统正确创建的聚合应该是什么样的?
class Catalog {
private Catalog parent;
private List<Document> documents;
...
}
class Document {
private Catalog catalog;
...
}
从架构的角度来看,上面介绍的方法在我看来是最好的。 DDD 原则之一是必须将聚合作为一个整体进行加载和保存。 因此,所提供的示例在实践中是不可能实现的,因为它需要从数据库中加载整个文件树。
class Catalog {
private CatalogID parent;
private List<DocumentID> documents;
...
}
class Document {
private CatalogID catalog;
...
}
另一种方法是仅存储 ID,而不是实体中的对象。但是,在这种情况下,我无法访问相关实体。
例如,考虑一种检查文档名称在给定目录中是否唯一的方法。
class Catalog {
private CatalogID parent;
private List<DocumentID> documents;
public bool IsNameUnique(string name) {
foreach (document in documents) {
if (document.Name == name) return true; <-- docuemnt is only ID, not reference
}
return true;
}
}
我无法获取文档名称,因为我只存储 ID 而不是实体引用。
我应该选择哪种方法以最好的方式解决这个问题? 提前感谢您的帮助。
【问题讨论】:
标签: design-patterns architecture domain-driven-design