我的数据库比较小,有8个表,每个表少于5列。我使用EF。我创建了单个存储库类,但现在我认为它可能不是正确的方式来使用它。我应该为每个控制器分别存储库类吗?比方说我有产品,用户,Unicorns是否可以让单个存储库类与所有这些控制器一起操作并在每个控制器中实例化,还是应该为每个控制器创建单独的存储库类?单个或多个存储库类?
12
A
回答
10
DDD的关键概念之一是聚合根 - 这是您通过其管理整套相关实体的“顶级”实体。例如,在一个零售场景中,'订单'将是一个可以访问订单本身的集合根,一个OrderItems列表(即产品+金额+修饰符,例如折扣),BillingAddress,ShippingAddress和PaymentMethod 。其中每一个都与订单本身密切相关,直到他们没有理由超出订单范围。
每个聚合根应该有一个存储库,它拥有在根目录下持久保存对象的整个子图的责任。所以在上面的例子中,你不需要或需要一个OrderItems的存储库,它允许独立地访问订购商品;相反,您应该实施一个OrdersRepository处理Orders及其所有子组件作为一个单元。
根据您的特定域模型,您可能需要一个或多个存储库,但当然不是每个实体类型都有一个。在寻找聚合根时要问的关键问题是“这个实体是否有自己的身份和生命周期?”订单确实,OrderItems没有。
1
我不认为每个实体的repoistory是一个好主意,而是每个服务的存储库,如果这是有道理的。
例如,如果我的主要应用程序的焦点在用户上,我不会去制作CategoriesRepository或CarsRepository。
2
想到领域驱动设计,考虑到这一点,您将项目的逻辑结构划分为不仅仅是类,而是作为域,这意味着所有操作都与Product
有关,它们位于ProductsController
之内因此在ProductsRepository
之内,所以我更喜欢很多存储库,每个存储库都配备了操作来处理项目的某些方面。
并不是所有方面都需要一个存储库,但这就是您的决定。
相关问题
- 1. 多个SVN存储库或单个公司存储库
- 2. 多个存储库或具有分支机构的单个存储库?
- 3. 单个与多个Linq2sql存储库
- 4. 多个用户的单个存储库
- 5. 多个Mercurial存储库或单个克隆
- 6. 设置2个或更多存储库?
- 7. 多个存储库,单一设置
- 8. 团队之间共享库的单个或多个Git存储库
- 9. 多个孤立分支或单独的存储库 - git
- 10. 如何将单个hg存储库转换为多个存储库
- 11. 从单个转储文件加载多个svn存储库
- 12. 在单个或多个核心上存储多组文档
- 13. Apache2 svn多个存储库
- 14. Git和多个存储库
- 15. 多个存储库和Heroku
- 16. 多个Git存储库
- 17. 创建多个存储库
- 18. 添加多个远程仓库到单个本地存储库
- 19. 单个存储库内的多个github库
- 20. Hg:将多个存储库合并为一个存储库
- 21. 将一个SVN存储库链接到多个Trac存储库
- 22. 将多个Git存储库推送到一个存储库
- 23. c#存储库模式:每个子类有一个存储库?
- 24. 摇篮上传单个存档到多个存储库
- 25. 将多个派生类类型存储在单个列表中
- 26. C#存储一个或多个基元
- 27. 设置版本存储库 - 一个或多个小的?
- 28. github上的多个用户和一个存储库或springloops
- 29. 许多SVN存储库或许多目录的存储库?
- 30. 将游戏卡数据存储在单个或多个XML中?
很好的答案!有用的文章解释了这个概念http://devlicio.us/blogs/casey/archive/2009/02/16/ddd-aggregates-and-aggregate-roots.aspx – GibboK