2011-02-09 53 views
1

如果您看一看at this SO question我对下一步有疑问。工作单元,存储库,上下文

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

似乎有要产生的UnitOfWork的几种方法,有时这被注入到存储库中,有时这可以由工厂产生(然后要么从工厂注入或检索。

我的问题是请问在的UnitOfWork通知其改变现在变成了要提交的资料库?

我想我可以有库订阅/回滚上的UnitOfWork事件提交。

第二个问题,单位的想法的工作是,如果我有这个权利,协调更新可能会conf lict。使用我的Item和SubItem(一个Item有许多SubItems)的例子,UnitOfWork协调这个,所以Item被首先写入,允许SubItem被写入?现在我似乎需要工作单位来了解这些看似不对的存储库。

谢谢。

回答

2

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

YMMV;它确实需要需要执行DB对象的类才能依赖于存储库以及工作单元。您可以使用其他代理来公开UnitOfWork本身上的方法,以使其成为唯一的依赖项。

+1

有趣。我认为我在开始时所遇到的一个概念性问题是,我的工作单位可能会在业务增加的时候过得很好。一旦我重新构建它,以便持久性调用不会无限期地延期,管理变得更容易。 – Ian 2011-02-10 10:09:42

相关问题