我正在尝试构建一个遵循工作模式的存储库和单元的系统,以允许持久化、忽略/单元测试等。我正在寻找处理回滚的建议。理想情况下,我想使用POCO,但我认为我可能至少需要实现一个接口来提供一些零碎的东西。
因此,假设我们有两个存储库,一个上下文/工作单元。
我添加了一项,修改了另一项,删除了第三项。对第二个存储库重复上述操作,然后调用rollback。
在过去,我使用类似于DataSet的东西来实现这一点。每个对象都有一个状态pendingNew、pendingAmended、pendingDeleted、clean。还有一个用于回滚的对象的副本最后一个持久化版本。
您将如何实现这一点?
编辑:
好的,这就是我想要的东西。准备好进行图案化:)
最终,该项目是WPF MVVM。所以无论商店在哪里,我们都在看模型。
我认为我一直在尝试将模型与存储库的概念混为一谈,因为我认为模型应该使用UOW和存储库来提供模型需要提供的功能。这听起来是不是更好?
我想要完全的持久化,所以假设我的域包含一个客户、一个订单和OrderLines。
假设图形用户界面有一个新订单按钮,允许用户填写客户详细信息、订单详细信息和1-n OrderLine详细信息。他点击保存,他们进入数据库,他点击取消,他们不会。
因此,在本例中,模型可能要求CustomerRepository提供一个客户,然后要求OrderRepository提供一个新订单,然后询问每个新行的OrderLineRepository,然后告诉工作单元保存它们。
这听起来合理吗?对我来说是这样的,我认为这就是分离的定义。我半心半意地想在模型和存储库之间使用另一个API。不,那太傻了。
编辑2:这是一篇很好的文章,有点helped。
发布于 2011-02-10 22:00:26
在没有更多细节的情况下很难确定,但我会从IDbConnection接口和相关接口来研究实现。它为您提供了一个大多数有经验的C#程序员都会熟悉的界面。
在幕后,说实话,这真的取决于你的存储机制的效率。如果它能有效地处理大量更改,那么您最好让回滚机制构建一个执行回滚所需的操作列表,该列表在“提交”时被丢弃。另一方面,如果更新开销很大,那么让事务机制维护一个提交操作列表,这些操作在回滚时会被丢弃。您还需要考虑其他代码是否应该在提交之前看到更新;在前一种方法中,它们会看到更新,在后一种方法中,它们不会。
发布于 2011-02-10 22:01:59
我会使用像NHibernate或实体框架这样的框架来实现这一点。:) NHibernate允许您使用POCO,并且已经为您完成了所有的管道工作。
https://stackoverflow.com/questions/4957902
复制相似问题