现在的位置: 首页 > 综合 > 正文

历史对像(版本对像)

2012年01月28日 ⁄ 综合 ⁄ 共 709字 ⁄ 字号 评论关闭

什么叫历史对象(版本对像)(自己取一个的名字,不知道是否有专业的名称了)
在一些系统中我们经常会碰到处理的对象是历史对象的问题

比方说我们有一个订单
订单里有多个产品,然后用户可能会修改这个产品(比如说,价格,名称,税收,。。。用哲学的语言就是今天的我不是昨天的我。)

哪么我们认为这个东西就是历史对像了,订单关联的是历史的产品,如果在设计中直接把它们印射到现在的对象上面,显然是不太合理的。

然后在编程中当中我们一般是把它保存成镜像 Order 然后有一个OrderItem 然后OrderItem里面是ProductSnap(一般是序列成字符串形式,我们称之为副本)

哪我们换一种想法一下。当这个产品被修改的时候,我们并不是真的去修改它,而是为他创造一个新的对像,而这个过程对用户是不可见的。也想当于说每一次修改我们就是创建一个新的版本,而订单只是关联到旧的版本。(而且有了版本之后用户还可以追朔他自己的操作了。)

在数据库设计和编程方面可能还有点复杂,

数据库基本结构
Order (ID....)
OrderItem (ID OrderId ProductID Amount....)
Product (ID...)

基本的想法是这样的 Product(ID...) ProductHistory.(ID ProductID)
另一种方式方式是Product(ID, GUID IsActive)
跟Order_Item关联的还是用 ID
用户看到都是ProductID (GuID) 然后每次修改就会造成一个新的Product但是它的guid是一样的

最关键的是我们应该有一个框架来支持它。使我们在编程的时候不会有太多这样的麻烦。否则太多的版本对像会分散程序员的开发注意力。

【上篇】
【下篇】

抱歉!评论已关闭.