|
|
1
1
一般来说,我会:
|
|
|
2
0
我的想法我有同样的想法。 以下是测试版方法(C#):
这看起来和跑步一样漂亮TransactionHelper.DoTransaction
然而,也有一些陷阱。
当我在一个团队工作时,我最初考虑过这个问题,这个团队产生了大量的代码,比如:
而不是
交易的好处在于:
附笔。也许我想重新发明轮子? 有没有一个更明智的方法的图书馆? 我没有预见到这种设计的缺陷是什么? |
|
|
3
0
我采用的第二种方法是在单独的类中记录回滚操作。
实际代码是成对编写的,例如:
当我需要做什么的时候
交易性的
它非常方便,因为这保证了文件的完整性。使用wise编码,即使进程在执行操作或回滚之间被终止(但在文件系统中留下一些垃圾),也可以保持完整性。 |
|
|
4
0
这取决于该方法应该做什么工作。一般来说,首先将事务的副作用存储到临时位置,然后在事务提交时,在一个原子操作中将副作用存储到永久位置。具体的操作方法会有很大的不同,这取决于您是在修改文件系统中的某些内容(从一些书籍中读到数据库事务日志是如何工作的)、一些内存中的数据结构、通过网络进行的修改还是其他操作。 例如,我曾经编写过一个事务性内存键值数据库(属于 http://dimdwarf.sourceforge.net/ ). 它保留一个临时列表,列出事务期间所做的所有修改。然后,当事务提交时,修改后的密钥被锁定在数据库中,修改后的密钥存储在数据库中(此操作不能失败),之后密钥将被解锁。一次只能提交一个事务,在事务完全提交之前,其他事务都不能看到更改。 |