假设我有两个实体 - Foo 和 Bar。Foo 是一个聚合根,包含 Bar。据我所知,它应该看起来像这样:
public class Foo{
private readonly Bar Bar;
}
我希望为用户提供从定义的列表中选择Bar对应于Foo的功能(并进行更改)。
如果存储库仅用于聚合根,这意味着没有Bar实体的存储库。
这导致问题-无法在没有对Foo的引用的情况下单独创建/更新Bar。
这是否意味着尽管没有Foo,但是Bar应该有一个存储库?
假设我有两个实体 - Foo 和 Bar。Foo 是一个聚合根,包含 Bar。据我所知,它应该看起来像这样:
public class Foo{
private readonly Bar Bar;
}
我希望为用户提供从定义的列表中选择Bar对应于Foo的功能(并进行更改)。
如果存储库仅用于聚合根,这意味着没有Bar实体的存储库。
这导致问题-无法在没有对Foo的引用的情况下单独创建/更新Bar。
这是否意味着尽管没有Foo,但是Bar应该有一个存储库?
Foo
的Bar
对象,请使用BarRepository
。
但是...
如果您更新了一个Bar
,并且它破坏了其父级Foo
的验证规则,如果这种情况可能发生,您应该通过其父级Foo
访问Bar
。
然而,如果您需要访问一堆Bar
对象(例如批处理作业或报告),而且您知道Foos
不会被破坏,请继续通过BarRepository
进行访问。
请记住,聚合根可以由其他聚合根组成。您可能会发现Bar
本身就是一个聚合根,从而为您提供使用BarRepository
的理由 :)
你确定需要将Bar作为一个实体吗?在领域中,你是否需要跟踪和更改它?如果你可以将其视为值对象,我建议你从服务中获取它,然后将选择的值对象与Foo实体“连接”起来。例如,通过下拉列表。