我对DDD很陌生,我对聚合路由的概念以及它在ASP .NET内核中的实现很不放心。
基本上,我有两条总路线:
其中可以有一个具有多个用户的组,并且每个用户都可以属于许多不同的组。
如果我正确理解它,规则关系聚合路由如下:
relationship)
的导航属性)。
事实上,一个AR不应该具有导航属性到另一个方法,我必须以某种不同的方式连接它们,例如使用ValueObject。
ValueObject:UserToGroup (不能具有可串行化的导航属性)
AR用户:
Id
AR群
Id
通过这种设置,我设法按照规则得到了所有的东西。但一个无法解释的问题出现了。如何查询来自一个组的所有用户??,例如,我可以这样做: var id= group.Users.Select(g => g.UserId) var usersFromGroup =userRepository.FetchByIds(Id)
但这似乎有点愚蠢,我觉得我基本上是在扼杀EF最好的功能之一,导航特性.
有什么建议可以用更好的方式来实现吗??
非常感谢你的回应。
布鲁诺
发布于 2022-01-31 05:01:39
我的建议是永远不要查询域模型。
在某些情况下,您在查询中需要的完整数据将在特定的域对象实例(聚合根)中可用/显示。但事实并非如此。
查询应该是一个特定的关注点,并尽可能接近数据存储区。通常,数据要么以一些低级数据结构(如DataRow )返回,要么以读取模型(数据传输对象)返回。域对象不应该跨越电线(好吧,这就是我对它的看法)。
对于查询,我将使用ISomethingQuery的实现,其中域交互将通过ISomethingRepository进行。通过这种方式,您可以远离导航属性和奇怪之处,比如“延迟加载”。您可以对所需的数据进行特定处理。
上面的结构通常会导致ORM不一定会增加很多价值,而会带来YMMV的情况。
https://stackoverflow.com/questions/70918259
复制相似问题