Domain driven design 在没有延迟加载的情况下访问聚合实体

Domain driven design 在没有延迟加载的情况下访问聚合实体,domain-driven-design,lazy-loading,entities,Domain Driven Design,Lazy Loading,Entities,我希望遵循DDD原理,而不是直接访问聚合的实体对象。因此,我必须调用根对象来获取关联的实体。但在其他情况下,我并不总是希望在调用根时加载每个关联实体。这就是延迟加载的目的吗 如果禁用linq的lazyloading功能,如何通过根访问实体对象而不每次加载所有关联对象 编辑: 例如,如果我有一个人作为根实体,并且此人有姓名、地址和OwnedProperties。如果我想获得一个人员列表,以便显示他们的姓名,我不一定每次调用存储库时都要加载所拥有的属性。相反,在另一个页面上,我可能希望显示Owned

我希望遵循DDD原理,而不是直接访问聚合的实体对象。因此,我必须调用根对象来获取关联的实体。但在其他情况下,我并不总是希望在调用根时加载每个关联实体。这就是延迟加载的目的吗

如果禁用linq的lazyloading功能,如何通过根访问实体对象而不每次加载所有关联对象

编辑:


例如,如果我有一个人作为根实体,并且此人有姓名、地址和OwnedProperties。如果我想获得一个人员列表,以便显示他们的姓名,我不一定每次调用存储库时都要加载所拥有的属性。相反,在另一个页面上,我可能希望显示OwnedProperties的列表,但不希望在调用时加载其他信息。除了创建一个新的Person对象而不使用所拥有的属性之外,调用没有所拥有属性实体的Person还有什么简单的方法呢?

我认为如果没有延迟加载,这是不可能的

  • 一次获取所有数据:快速加载
  • 访问时获取数据:延迟加载
根据您的编辑: 在这些情况下,我要做的是创建一个“视图”类或“DTO”类,它只包含我感兴趣的属性。 例如,我可以有一个“PersonView”类,它只有一个Name属性作为实例


然后,使用我的OR/M映射器(我使用NHibernate),我创建了一个HQL查询(或条件查询),它在我的“Person”实体上工作。在执行查询之前,我告诉NHibernate我想要“PersonView”对象作为结果(我指定了一个投影)。然后,NHibernate足够聪明,可以执行一个只检索填充PersonView实例所需的列的查询。

避免延迟加载的一种方法就是只使用对象“id”

您能提供一个具体的示例吗?可能不能。DDD是一套模糊的原则,没有实际的例子。@Cletus,有很多具体的例子。。请看Evans的书……这是一个令人担忧的迹象,因为领域抽象和系统抽象都是概念性的,以至于您无法轻松识别所引用的内容。这是臭名昭著的原则“只需添加另一个抽象层”或“一个环来管理所有抽象层”的一个很好的例子。在您的情况下,您的存储库不需要为每个场景设置重载,然后决定在存储库中调用哪个方法吗?您的确切意思是什么?例如,我的存储库中有一个名为“FindPersons”的方法,它返回“PersonView”实例。