如何解决与DDD中依赖其他实体的实体相关的性能/内存问题?

时间:2012-03-05 10:01:24

标签: c# java oop dependency-injection domain-driven-design

假设我没有使用ORM,并且遵循DDD,请考虑以下情况:

Project有一组File s。

我创建了ProjectProjectRepository以及FileFileRepository类。

我最初的想法是让给定File的所有Project个实体在其构造函数中传递给它。当然,这个Project实例将通过ProjectRepository创建。

问题是,如果我有一百万个文件(虽然我不会有一百万个文件,但我会有足够的文件需要一段时间),我将不得不加载所有文件,即使是我真的不需要它们。

这是什么标准方法?我想不出比将FileRepository传递给每个Project实例更好的事情。

3 个答案:

答案 0 :(得分:4)

由于您提到DDD:如果有两个存储库,则表示有两个聚合根。 Aggregate Root概念的重点是每个根负责其整个对象图

如果您尝试将文件混合到项目对象图中,则文件的所有权不明确。换句话说,不要这样做:

project
- file
- file
- file

将它们视为两个(关联的)对象图,或者重新构建API,以便只有一个聚合根(存储库)。

答案 1 :(得分:2)

没有标准的方法。这是域驱动的设计,如果你问我,它取决于域名。 也许您可以为您的设计添加更多域名。 您只有两个概念:项目和文件。但是你说你不想加载文件(假设File总是加载文件的内容)。

所以也许你应该考虑一个FileReference,它是文件的轻量级表示(Name,Path,Size?)。 对我来说,听起来你的问题是处理大量文件而不是OOP。

答案 2 :(得分:1)

您可以实现客户端与之交互的service layer,以协调存储库并返回域实体。这样可以更好地分离关注点;我个人认为您的客户端不应该访问您的存储库。