【问题标题】:Undo with database使用数据库撤消
【发布时间】:2011-03-18 17:13:23
【问题描述】:

我正在尝试编写“撤消”或“回滚”类型的场景。我的一部分认为我把这个复杂化了,它之前一定已经解决了。

背景:我有一个产品(例如一本书),该产品有 20 个字段。产品有一种媒体类型(PDF、硬拷贝、EPUB),每种媒体类型都有多种定价(价格、位置,即欧洲、亚洲、美洲)。

查看之前的问题,memento pattern 似乎是最接近的,但我不确定如何做多层次。

例如,Change 1 - 创建产品“Coding for Dummies”,提供硬拷贝,在欧洲售价 100 美元,在亚洲售价 75 美元

更改 2 - 将欧洲硬拷贝价格更改为 90 美元。添加 PDF,欧洲 90 美元,亚洲 75 美元

更改 3 - 删除硬拷贝记录

更改 3 出错,我想回滚到更改 2。

LookingatpreviousquestionsMementopattern 似乎是最接近的,但我会复制大量数据。即在更改 2 和 3 中,您正在重复产品、媒体和定价。

我使用的数据集有近 1,000,000 种产品。 (上面的例子是简化的)实际上一个Product大约有50个字段,Media Type大约有15个字段

有没有更好的办法?

【问题讨论】:

    标签: database design-patterns undo


    【解决方案1】:

    在您的表格上实施日期文件。

    通过这种方式,您将输入价格在 2011 年 3 月 1 日或其他时间从 21 变为 30 的事实,而不仅仅是破坏旧值。那么您不仅可以查询最近的更改,还可以通过操作日期恢复到旧定价。

    【讨论】:

      【解决方案2】:

      我不太清楚你所说的多层次是什么意思以及为什么在你的帖子中提到数据库,但通常命令或纪念品都是在面向对象程序中撤消和重做的好选择。两种方式你都应该没问题。

      复制数据是什么意思?您只需要记住产品状态的变化 - 如果您想稍后恢复它们,没有其他方法......

      【讨论】:

      • 我说的是数据库,因为您必须将数据存储在某个地方。我读过的很多例子都被过度简化了,说“只需以一种方便的格式(如 xml)在某处序列化数据”。在这种情况下,在 xml 中保存状态是不切实际的
      • 数据是指数据的变化?如果这两种模式都是这样,则存在可以保存在数据库中的“更改对象”(通过 orm f. ex.)。如果磁盘空间有问题,可能需要注意在某个时候删除最旧的。但除了这种扭曲之外,我会将其视为正常数据。
      猜你喜欢
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 2019-05-28
      • 2010-09-30
      • 1970-01-01
      • 2014-02-04
      相关资源
      最近更新 更多