4

我一直在寻找将存储库和工作单元集成到我的项目中的“正确”方法,但我一直在运行不同的变体。有些将存储库作为 uow 对象的成员。其他人拥有实现 IUnitOfWork 接口的存储库。我已经看到一些将 uow 对象作为参数传递给存储库的构造函数。

以一种方式比其他方式有什么好处吗?如果有共识,共识是什么?

4

3 回答 3

3

我不能说那里已经达成共识,但是在我与许多建筑师就这个话题进行过交谈之后,我已经花了相当多的时间来评估这件事。我想出的是您希望保持对象管理(存储库)和事务(UnitOfWork)松散耦合并且彼此独立。您的存储库应该能够在无需使用事务的情况下运行,反之亦然。就其与存储库的关系而言,工作单元实际上只是事务的包装器。在您的情况下,您可能会使用 TransactionScope 实现来包装 EF2 存储库操作。在我们的框架中,我们将事务管理放入 DataServices 命名空间/项目中,并将我们的基础 Repository 类放入 ObjectAccess 命名空间/项目中。从那里我们为存储库操作和工作单元操作创建了一个 EF2 实现。我不能给你来源,但基本上我所做的如下:

  • 使用 NCommon 1.1 Beta 作为我的起点:NCommon
  • 将工作单元与 NCommon 中的存储库操作分离
  • 然后我继续讨论如何管理我的 ObjectContext。

我们即将发布该框架的第一个稳定版本。祝你好运!

于 2011-01-04T23:36:51.547 回答
2

鉴于以下页面,我会说 MS 共识是 UnitOfWork 公开存储库:

http://www.asp.net/entity-framework/tutorials/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

http://msdn.microsoft.com/en-us/library/ff714955.aspx

两者似乎都是 MS 指导,而不是 1 个人的简化博客文章示例。

于 2011-11-02T16:04:47.643 回答
0

没有“正确”的方法可以做到这一点。找到适合您情况的实现并使用它。我个人喜欢保持简单,所以我通常只在我的所有项目中使用通用存储库(根本没有 UoW 接口/模式)。

于 2011-01-04T23:18:56.127 回答