【问题标题】:Transactions on Data within Instances?实例内的数据交易?
【发布时间】:2012-12-07 20:39:16
【问题描述】:

我有一个包含大量数据的类,它允许对类中的数据进行一些复杂的操作。该类还具有一些允许检索某些数据的成员函数,即检索对包含在该类中的对象实例的引用。所有数据都保存在 RAM 中(没有支持后台事务的 DB)。

现在我想实现一种事务概念,即我想添加一个 StartTransaction() 方法和一个 Rollback() 方法。这就是我的问题开始的地方:如何在不更改任何对象引用的情况下将类中的数据恢复到以前的状态(因为它们可能在类外使用)。

因此,所有克隆概念都没有用。

这种方法是否有解决方案,或者这种方法太奇怪以至于我不应该遵循它。有什么替代方案?

【问题讨论】:

  • 您要查找的内容需要对事务内存的支持。也许this Microsoft research 项目可以提供帮助。
  • 面向对象的编程是关于由外部世界无法访问但只能从对象内部访问的内部状态描述的对象。当您想对对象进行操作时,您调用对象的方法,这将导致对象的另一个有效状态。如果你想实现交易,你必须实现 ACID 原则。在某种程度上,一种方法在具有适当锁定的多线程环境中实现它们。如果您想保护您的数据免受多次访问,您可以锁定它们。对于回滚,您必须保存保存值。

标签: c# clone transactional


【解决方案1】:

您仍然可以使用克隆,但您的代码需要新的间接级别:

旧:

class Data { int SomeValue; }

class DataInternal { int SomeValue; }
class Data { DataInternal internal; int SomeValue { get { return internal.SomeValue; } }

这允许您将外部接口 (Data) 与存储 (DataInternal) 分离。您可以随意克隆和恢复internal,而不会引起任何人的注意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多