domain-driven-design - 领域驱动设计 : Repository per aggregate root?

标签 domain-driven-design repository

我试图弄清楚如何完成以下任务:

User can have many Websites

在向用户添加新网站之前,我需要做的是获取网站 URL 并将其传递给一个方法,该方法将检查该网站是否已存在于数据库中(另一个用户具有相同的网站关联),或者是否创建一个新记录。 <= 原因是是创建新缩略图还是使用现有缩略图。

问题是存储库应该是每个聚合根,这意味着我不能做我上面解释的事情? - 我可以先获取数据库中的所有用户,然后使用 if 语句进行 foreach 查找,该语句检查用户在何处拥有具有相同 URL 的网站记录,但这会导致无休止和缓慢的过程。

最佳答案

无论您使用何种存储库方法,您都应该能够以某种方式指定标准。因此,搜索与相关网站关联的用户 - 如果搜索未返回任何用户,则该网站未在使用中。

例如,您可以添加具有以下签名的方法(或者您将查询对象作为 described in this article 传递):

User GetUser(string hasUrl);

该方法应该或多或少地像这样生成 SQL:
select u.userId
from   User u
join   Website w
on     w.UserId = u.UserId
where  w.Url    = @url

这应该几乎与查询 Website 一样有效。直接表;无需将所有用户和网站记录加载到内存中。让您的关系数据库完成繁重的工作,让您的存储库实现(或对象关系映射器)处理转换。

关于domain-driven-design - 领域驱动设计 : Repository per aggregate root?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4962922/

相关文章:

c# - 可以在一个 WPF 应用程序中保留不同的有界上下文 (BC) 吗?

repository - Gradle/ivy使用缓存的存储库?

azure - 我应该如何创建 "should store in Redis cache"抽象?

c# - 在持久化聚合之前发布领域事件是否安全?

Spring 启动: How to keep DDD entities clean from JPA/Hibernate Annotations?

asp.net-mvc - 服务层正在重复我的存储库

docker - Web UI 代码和微服务在同一个 monorepo 中?

Github - 在 fork 私有(private)仓库后删除协作者

svn - 与工作副本相比,Subversion 存储库的文件大小较小?

c# - 领域驱动开发和丰富的 GUI