我试图弄清楚如何完成以下任务:
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/