2

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

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

看看以前的问题,纪念品模式似乎是最接近的,但我不确定如何做多层次。

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

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

更改 3 - 删除硬拷贝记录

Change 3 出错了,我想回滚到 Change 2。

查看 之前 问题Memento模式似乎是最接近的,但我会复制大量数据。即在更改 2 和 3 中,您正在重复产品、媒体和定价。

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

有没有更好的办法?

4

2 回答 2

1

在您的表格上实施日期归档。

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

于 2010-07-20T22:52:31.000 回答
0

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

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

于 2010-07-20T22:44:23.223 回答