假设我没有使用ORM,并且遵循DDD,请考虑以下情况:
Project
有一组File
s。
我创建了Project
和ProjectRepository
以及File
和FileRepository
类。
我最初的想法是让给定File
的所有Project
个实体在其构造函数中传递给它。当然,这个Project实例将通过ProjectRepository
创建。
问题是,如果我有一百万个文件(虽然我不会有一百万个文件,但我会有足够的文件需要一段时间),我将不得不加载所有文件,即使是我真的不需要它们。
这是什么标准方法?我想不出比将FileRepository
传递给每个Project
实例更好的事情。
答案 0 :(得分:4)
由于您提到DDD:如果有两个存储库,则表示有两个聚合根。 Aggregate Root概念的重点是每个根负责其整个对象图。
如果您尝试将文件混合到项目对象图中,则文件的所有权不明确。换句话说,不要这样做:
project
- file
- file
- file
将它们视为两个(关联的)对象图,或者重新构建API,以便只有一个聚合根(存储库)。
答案 1 :(得分:2)
没有标准的方法。这是域驱动的设计,如果你问我,它取决于域名。 也许您可以为您的设计添加更多域名。 您只有两个概念:项目和文件。但是你说你不想加载文件(假设File总是加载文件的内容)。
所以也许你应该考虑一个FileReference,它是文件的轻量级表示(Name,Path,Size?)。 对我来说,听起来你的问题是处理大量文件而不是OOP。
答案 2 :(得分:1)
您可以实现客户端与之交互的service layer,以协调存储库并返回域实体。这样可以更好地分离关注点;我个人认为您的客户端不应该访问您的存储库。