使用数据库撤消

发布于 2024-09-10 20:37:40 字数 1205 浏览 7 评论 0 原文

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

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

查看之前的问题,纪念品模式似乎是最接近的,但我不确定如何进行多级别。

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

Change 2 - 改变欧洲硬拷贝价格为 90 美元。添加 PDF,欧洲费用为 90 美元,亚洲费用为 75 美元

更改 3 - 删除硬拷贝记录

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

查看 位于 上一页 问题备忘录 模式 似乎是是最接近的,但我会复制大量数据。即在 Change 2 & 中3、您正在重复产品、媒体和定价。

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

有没有更好的方法?

I'm trying to code an "undo" or "rollback" type scenario. Part of me thinks I am over complicating this and it must have been solved before.

Background: I have a Product (eg A book) the product has 20 fields. A Product has a Media Type (PDF, Hardcopy, EPUB) and each Media Type has multiple pricing (price, location ie Europe, Asia, America).

Looking at previous questions, the memento pattern seems to be the closest but I'm not sure how to do the multi levels.

Eg, Change 1 - Create the Product "Coding for Dummies", it is available in Hardcopy and is available for $100 in Europe and $75 in Asia

Change 2 - Change the Europe Hardcopy price to $90. Add a PDF, it costs $90 for Europe and $75 for asia

Change 3 - Delete the Hardcopy record

Change 3 was a mistake, I'd like to rollback to Change 2.

Looking at previous questions, the Memento pattern seems to be be the closest, but I would duplicate an awful lot of data. ie in Change 2 & 3, you are repeating the Product, Media and Pricing.

The Dataset I am using has almost 1,000,000 products. (The above example is simplified) In reality, a Product has about 50 fields, the Media Type has about 15 fields

Is there a better way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

萌梦深 2024-09-17 20:37:40

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

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

implement date fileds on your tables.

in this way you would be entering the fact that the price changed from 21 to 30 on 01-MAR-2011 or something, not just whacking the old values. then you will be able to query not just the most recent change, but you could revert to old pricing just by manipulating the dates.

花辞树 2024-09-17 20:37:40

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

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

I'm not quite sure what you mean by multiple levels and why the database is mentioned in your post, but generally command or memento are both good options to get undo and redo in an object -oriented program. Both ways you should be fine.

What do you mean by duplicating data? You just remember the changes in the state of the products - there is no other way if you'd like to revert them later...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文