代码之家  ›  专栏  ›  技术社区  ›  Christian Payne Larry Baltz

用数据库撤消

  •  2
  • Christian Payne Larry Baltz  · 技术社区  · 14 年前

    我正在尝试编写“撤消”或“回滚”类型的方案。我的一部分人认为我把这件事弄得太复杂了,这肯定是以前解决过的。

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

    看看前面的问题,记忆模式似乎是最接近的,但我不确定如何进行多层次的学习。

    如, 变化1 -创建产品“为假人编码”,它有硬拷贝,在欧洲为100美元,在亚洲为75美元。

    变化2 -将欧洲硬拷贝价格改为90美元。加一个PDF,欧洲90美元,亚洲75美元

    变化3 -删除硬拷贝记录

    更改3是一个错误,我想回滚到更改2。

    Looking at previous questions , the Memento pattern 似乎是最近的,但我会复制大量数据。也就是说,在更改2和3中,您将重复产品、媒体和定价。

    我使用的数据集有将近1000000个产品。(以上示例简化)实际上,一个产品有大约50个字段,媒体类型有大约15个字段。

    有更好的方法吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Randy    14 年前

    在表中实现日期文件。

    通过这种方式,你将进入这样一个事实,即价格在2011年3月1日从21改为30或其他什么,而不仅仅是重击旧的价值观。然后,您不仅可以查询最近的更改,还可以通过操纵日期恢复到旧的定价。

        2
  •  0
  •   Carl Düvel    14 年前

    我不太清楚你所说的多个层次是什么意思,以及为什么在你的文章中提到数据库,但是一般来说,命令或备忘录都是在面向对象的程序中得到撤销和重做的好选择。两方面你都应该没事。

    复制数据是什么意思?您只需记住产品状态的更改—如果您以后想恢复它们,就没有其他方法了…