工作单元,存储库,上下文

时间:2011-02-09 23:05:57

标签: c# design-patterns

如果你看一下at this SO question,我对下一步有疑问。

想象一下,您有两个存储库生成Items和SubItems。我还有一个UnitOfWork,它作为一个上下文,用于更改(在这个简单的情况下)两个不同的项目。

似乎有一些生成UnitOfWork的方法,有时会将其注入到存储库中,有时这可以由工厂生成(然后从工厂注入或检索。

我的问题是UnitOfWork如何通知存储库现在要提交更改?

我想我可以让存储库订阅UnitOfWork上的事件以进行提交/回滚。

第二个问题,如果我有这个权利,工作单位的想法是协调可能发生冲突的更新。使用我的Item和SubItem示例(一个Item有多个SubItems),UnitOfWork协调这个,所以首先编写Item,允许写入SubItem?现在我似乎需要工作单元来了解看起来错误的存储库。

感谢。

1 个答案:

答案 0 :(得分:2)

我构建我的存储库的方式是让UnitOfWork只是一个“令牌”,由Repo上的BeginUnitOfWork()方法生成,然后必须传递给Repo上的任何其他方法,调用。在概念上,它必须知道如何做的唯一事情是,当发生这种情况时,会导致与该UOW相关联的NHibernate会话被关闭。它通过在Repo中给予受保护方法的委托来执行此操作,然后在其Dispose方法中回调它。这对我来说是完全抽象的实际数据访问机制;无论后端如何,我都可以实现相同的模式,模式的用户无法破解UnitOfWork以获得实际的数据访问机制。

因人而异;它确实需要需要执行DB对象的类依赖于存储库以及工作单元。您可以使用其他委托来公开UnitOfWork本身的方法,使其成为唯一的依赖项。