ebb*_*ebb 5 domain-driven-design repository
我正在尝试弄清楚如何完成以下任务:
User can have many Websites
Run Code Online (Sandbox Code Playgroud)
在向用户添加新网站之前,我需要做的是获取网站 URL 并将其传递给一个方法,该方法将检查该网站是否已存在于数据库中(另一个用户具有关联的相同网站),或者是否创建一个新记录。<= 原因在于是创建新缩略图还是使用现有缩略图。
问题是存储库应该是每个聚合根的,这意味着我无法执行上面解释的操作?- 我可以首先获取数据库中的所有用户,然后使用 if 语句进行 foreach 查找,检查用户在哪里拥有具有相同 URL 的网站记录,但这会导致无休止且缓慢的过程。
无论您使用哪种存储库方法,您都应该能够以某种方式指定标准。因此,搜索与相关网站关联的用户 - 如果搜索未返回任何用户,则该网站未被使用。
例如,您可以添加具有以下签名的方法(或者您将传递一个查询对象,如本文所述):
User GetUser(string hasUrl);
Run Code Online (Sandbox Code Playgroud)
该方法应该生成或多或少像这样的 SQL:
select u.userId
from User u
join Website w
on w.UserId = u.UserId
where w.Url = @url
Run Code Online (Sandbox Code Playgroud)
这应该几乎与Website直接查询表一样高效;无需将所有用户和网站记录加载到内存中。让您的关系数据库承担繁重的工作,并让您的存储库实现(或对象关系映射器)处理转换。
| 归档时间: |
|
| 查看次数: |
2147 次 |
| 最近记录: |