Domain driven design DDD(EntityFramework)中存储库的职责 实体Foo和Bar都是聚合根 Foo参考栏 SomeService执行以下操作 A.调用FooRepository.FindId()以获取Foo的实例 B修改Foo实例,并对Foo实例引用的Bar实例进行一些修改 C调用FooRepository.Update(Foo)以持久化对Foo实例所做的更改

Domain driven design DDD(EntityFramework)中存储库的职责 实体Foo和Bar都是聚合根 Foo参考栏 SomeService执行以下操作 A.调用FooRepository.FindId()以获取Foo的实例 B修改Foo实例,并对Foo实例引用的Bar实例进行一些修改 C调用FooRepository.Update(Foo)以持久化对Foo实例所做的更改,domain-driven-design,Domain Driven Design,问题: 1.知道Foo->Bar之后,FooRepository.FindId()将如何构造Foo实例及其引用的Bar实例?(假设使用EntityFramework,并且据我所知,EntityFramework自动构建实体及其依赖项) 2.假设Foo实例引用了Bar实例,那么FooRepository.Update()是否也应该保留对Bar实例所做的更改? 如果答案是否定的,假设Entity Framework是用于数据库访问的技术,那么某个服务如何告诉存储库(或者更准确地说是EntityFra

问题: 1.知道Foo->Bar之后,FooRepository.FindId()将如何构造Foo实例及其引用的Bar实例?(假设使用EntityFramework,并且据我所知,EntityFramework自动构建实体及其依赖项) 2.假设Foo实例引用了Bar实例,那么FooRepository.Update()是否也应该保留对Bar实例所做的更改? 如果答案是否定的,假设Entity Framework是用于数据库访问的技术,那么某个服务如何告诉存储库(或者更准确地说是EntityFramework)忽略Bar的更改呢?

阅读后,让我了解一下如何设计聚合

作为一项规则,我将参考酒吧的身份。如果要改变它的boo状态,我将从BarRepository中获取它

  • 正如rantri所指出的,不鼓励不同聚合之间的对象引用。最好使用标识引用。这是因为聚合需要是一致性边界,如果存在多个聚合,则很难执行该边界

  • EF应该能够更新引用的条形图实体。我知道在NHibernate中,这称为可达性持久性,可以启用或禁用。然而,这是有问题的,因为它使我们更难推断实体是如何以及何时持久化的。告诉某些人忽略对条的更改的最好方法是避免直接引用条。通常情况下,引用类似于条的内容的唯一原因是为了显示。在这种情况下,最好使用专用的域对象,而不是污染域对象。如果Foo上的行为需要一个Bar引用,那么最好让周围的应用程序服务直接向其提供Foo所需的数据