我正在使用SQL Server CR E 3.5在C#中编写数据库应用程序,并希望实现存储库模式。我在Google和SO上都做了几次搜索;但是,我找不到符合我需求的实现,所以我会直接询问SO社区。 p>
我的应用中的关键业务对象是:视频,演员,标签类别和标签。基本业务规则如下:
以下事情对我来说很模糊:
我应该实现包含actor,标记类别和标记的视频存储库,还是应该每个业务对象都有自己的存储库?鉴于这些对象可以独立存在,我倾向于为每个对象创建一个存储库。
如果每个对象都应该有自己的存储库,我该如何关联它们?例如,视频存储库是否应包含一个查询标记存储库以查找匹配项的属性?
我正在寻找一些指导方针或最佳做法来进行此设置。我理解存储库模式的基础知识,但我需要一些关于如何将它们连接在一起的建议。
答案 0 :(得分:2)
您应该只拥有aggregate roots的存储库。
我不建议使用存储库作为封装所有查询的方法。存储库不是查询的大倾销场所 - 它们是在DDD最适用的场景中使用的特定工具。有关更多信息,请参阅此文章:http://ayende.com/blog/3955/repository-is-the-new-singleton
不需要'连接'或'关联'存储库。
如果要编写诸如“为该用户借用的视频加载所有标记”之类的查询,最好不要将其放入存储库中。此查询最有可能特定于某种情况,例如一个UI,应该写在需要查询的类的内部或附近。查询的输出可能会映射到专门为UI要求创建的只读数据传输对象,而不是映射到您的实体。