存储库模式,显式或隐式保存?

时间:2010-07-31 21:05:18

标签: repository-pattern

我知道这是一个奇怪的问题:)

我真的很想以正确的方式做事,我有一个疑问。

我知道使用DI ...制作界面

我的问题是:

最好有一个类似“SaveChanges”的方法,你必须在每次添加/删除/无论对象时手动调用它?:

_repo.Add(blah);
_repo.SaveChanges();

或者最好在每个修改数据的方法中保存更改?

另一方面,我是否应该始终打开连接或让我关闭它?

我正在学习DB4O并且我有一个Close方法,当我必须在另一个地方使用repo时我会调用它(就像在另一个窗口中,我在打开窗口之前关闭)。

谢谢。

2 个答案:

答案 0 :(得分:2)

我个人喜欢将SaveChanges方法分开。我认为它可以在消费应用程序中提供更大的灵活性。这意味着它可以有更多的重用。

例如,将其分开允许“事务”方法,其中可以不断修改存储库,然后如果一切都可以接受,则调用save方法。

另一方面,如果您想立即保存而无需单独调用,则可以创建另一个版本的存储库,在CRUD操作期间调用save方法。

答案 1 :(得分:0)

我认为在.Net DataSet中,他们还使用AcceptChanges()函数来“提交”最新的数据修改。同样在Oracle数据库中,有一个用于类似任务的COMMIT命令。