单个或多个存储库类?

m0s*_*m0s 12 domain-driven-design entity-framework repository-pattern asp.net-mvc-2

我的数据库相对较小,有8个表,每个表少于5列.我用EF.我创建了单个存储库类,但现在我认为它可能不是使用它的正确方法.我应该为每个控制器设置单独的存储库类吗?可以说我有产品,用户,独角兽会是罚款,有一个单一的仓储类有所有这些操作和实例化在每个那些控制器,或者我应该创建为每个单独仓库类?

Add*_*dys 11

一个DDD的关键概念是总根源 - 这是通过它你管理相关实体的整个套"顶级"的实体.

例如,在零售场景中,"订单"将是一个聚合根,您可以通过该聚合根访问订单本身,OrderItems列表(即产品+金额+修改者,如折扣),BillingAddress,ShippingAddress和PaymentMethod.其中每一个都与订单本身密切相关,以至于他们没有理由在订单范围之外存在.

每个聚合根应该有一个存储库,该存储库负责在根目录下持久化对象的整个子图.因此,在上面的示例中,您不希望或需要OrderItems的存储库,它允许独立访问订单项; 相反,您应该实现一个OrdersRepository,它将Orders及其所有子组件作为一个单元处理.

根据您的特定域模型,您可能需要一个或多个存储库,但肯定不是每个实体类型一个.在寻找聚合根时要问的关键问题是"这个实体是否有自己的身份和生命周期?" 订单这样做,OrderItems没有.