对象版本控制模式

6
我正在尝试对我们领域中的一些对象进行建模,发现一些对象可能存在版本问题。即,用户可能会在一段时间内创建新的对象版本。因此,我需要在程序中对它们进行建模。我认为这是软件设计中常见的问题。
最初,我想到了模仿源代码控制版本概念,并提出了一个版本化对象概念和类似于check-in、check-out等方法。但是,我感觉这并不是很“系统化”,因为我没有探索模式(即,我觉得自己犯了罪,比如:
- 我没有涵盖寻找多个解决方案等方面 - 没有查阅能够给我更可靠参考的文献等)。
因此,我目前的问题是,为了进行系统化建模,我需要寻找能够解决版本建模问题的模式,最好是在文献中找到最佳方案。
于是,我谷歌了一下这样的模式,只找到了Temporal Object pattern。但是,我不确定这是否真的是我想要的。你们有什么关于这种模式的建议吗?
[自行编辑]也许我没有很好地描述这个问题。您可以将问题视为源代码控制文件版本问题。我有几种类型的对象(存储在数据库中),可以有几个版本。在我的应用程序中,我必须处理所有这些版本,还必须创建对象的新版本(最终将存储在数据库中)。我正在寻找某种可引用的模式,以便为访问/修改/添加这些对象的新版本建模接口。我能想到的基本接口是IVersionedObject,其中包括checkout、checkin、undoCheckout等方法。但是,这是我根据观察源代码控制系统得出的想法。我不认为它是一种软件设计模式。因此,期待上述问题的一些非常详细的设计模式。

2
请查看此链接:https://dev59.com/ZHRB5IYBdhLWcg3wpoxm,它可能会给您一些想法。 - Amir Ismail
1
您可以查看此[帖子](http://miroprocessordev.blogspot.com/2011/11/design-patterns-series-1-introduction.html)以了解各种设计模式。 - Amir Ismail
你提到了时间对象,但是需要注意的是,这个模式来自于一个更大的文章。具体可以参考:http://martinfowler.com/eaaDev/timeNarrative.html。 - Dave Cousineau
还有该模式的更详细版本 - Dave Cousineau
这个回答解决了你的问题吗?数据库持久化对象版本控制,你会怎么做? - Marco Eckstein
1个回答

1

类似自定义的DataMapper不是更好吗?

doc = DocCatalog.get( docid, version );

假设您可以将每个对象视为所代表对象的物质化,即在某一时刻。与具有“版本”属性的对象不同,“版本控制”由数据映射器/目录/数据库处理;即对象不知道版本,但对象存储系统知道。

将对象保存/存储在数据映射器中会生成一个新版本:

// saves doc again after changing the title (which indeed stores a new version of it)
doc.setTitle ( newTitle );
DocCatalog.save( doc );

// gets a number indicating how many versions of the document exist
i_versions = DocCatalog.getVersions( docid );

// returns second-last version of the document
doc = DocCatalog.get( docid, i_versions-1 );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接