首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DDD和多到多聚合路由关系

DDD和多到多聚合路由关系
EN

Stack Overflow用户
提问于 2022-01-30 19:41:33
回答 1查看 273关注 0票数 0

我对DDD很陌生,我对聚合路由的概念以及它在ASP .NET内核中的实现很不放心。

基本上,我有两条总路线:

  • User
  • Group

其中可以有一个具有多个用户的组,并且每个用户都可以属于许多不同的组。

如果我正确理解它,规则关系聚合路由如下:

relationship)

  • aggregate聚合路由应该是可序列化的(没有循环
  • 路由不能具有指向其他聚合路由

的导航属性)。

事实上,一个AR不应该具有导航属性到另一个方法,我必须以某种不同的方式连接它们,例如使用ValueObject。

ValueObject:UserToGroup (不能具有可串行化的导航属性)

  • GUID UserId
  • GUID GroupId

AR用户:

Id

  • ICOLLECTION<
  • GUID UserToGroup > Groups

AR群

Id

  • ICOLLECTION<
  • GUID UserToGroup >User

通过这种设置,我设法按照规则得到了所有的东西。但一个无法解释的问题出现了。如何查询来自一个组的所有用户??,例如,我可以这样做: var id= group.Users.Select(g => g.UserId) var usersFromGroup =userRepository.FetchByIds(Id)

但这似乎有点愚蠢,我觉得我基本上是在扼杀EF最好的功能之一,导航特性.

有什么建议可以用更好的方式来实现吗??

非常感谢你的回应。

布鲁诺

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-31 05:01:39

我的建议是永远不要查询域模型。

在某些情况下,您在查询中需要的完整数据将在特定的域对象实例(聚合根)中可用/显示。但事实并非如此。

查询应该是一个特定的关注点,并尽可能接近数据存储区。通常,数据要么以一些低级数据结构(如DataRow )返回,要么以读取模型(数据传输对象)返回。域对象不应该跨越电线(好吧,这就是我对它的看法)。

对于查询,我将使用ISomethingQuery的实现,其中域交互将通过ISomethingRepository进行。通过这种方式,您可以远离导航属性和奇怪之处,比如“延迟加载”。您可以对所需的数据进行特定处理。

上面的结构通常会导致ORM不一定会增加很多价值,而会带来YMMV的情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70918259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档