我一直在寻找将存储库和工作单元集成到我的项目中的“正确”方法,但我一直在运行不同的变体。有些将存储库作为 uow 对象的成员。其他人拥有实现 IUnitOfWork 接口的存储库。我已经看到一些将 uow 对象作为参数传递给存储库的构造函数。
以一种方式比其他方式有什么好处吗?如果有共识,共识是什么?
我一直在寻找将存储库和工作单元集成到我的项目中的“正确”方法,但我一直在运行不同的变体。有些将存储库作为 uow 对象的成员。其他人拥有实现 IUnitOfWork 接口的存储库。我已经看到一些将 uow 对象作为参数传递给存储库的构造函数。
以一种方式比其他方式有什么好处吗?如果有共识,共识是什么?
我不能说那里已经达成共识,但是在我与许多建筑师就这个话题进行过交谈之后,我已经花了相当多的时间来评估这件事。我想出的是您希望保持对象管理(存储库)和事务(UnitOfWork)松散耦合并且彼此独立。您的存储库应该能够在无需使用事务的情况下运行,反之亦然。就其与存储库的关系而言,工作单元实际上只是事务的包装器。在您的情况下,您可能会使用 TransactionScope 实现来包装 EF2 存储库操作。在我们的框架中,我们将事务管理放入 DataServices 命名空间/项目中,并将我们的基础 Repository 类放入 ObjectAccess 命名空间/项目中。从那里我们为存储库操作和工作单元操作创建了一个 EF2 实现。我不能给你来源,但基本上我所做的如下:
我们即将发布该框架的第一个稳定版本。祝你好运!
鉴于以下页面,我会说 MS 共识是 UnitOfWork 公开存储库:
http://msdn.microsoft.com/en-us/library/ff714955.aspx
两者似乎都是 MS 指导,而不是 1 个人的简化博客文章示例。
没有“正确”的方法可以做到这一点。找到适合您情况的实现并使用它。我个人喜欢保持简单,所以我通常只在我的所有项目中使用通用存储库(根本没有 UoW 接口/模式)。