Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 对象版本控制模式_Oop_Design Patterns_Database Design_Versioning - Fatal编程技术网

Oop 对象版本控制模式

Oop 对象版本控制模式,oop,design-patterns,database-design,versioning,Oop,Design Patterns,Database Design,Versioning,我试图对我们域中的一些对象进行建模,但遇到了一个问题,这些对象中的一些可以进行版本控制。i、 用户可以在一段时间内创建新的对象版本。所以,我需要在程序中对它们进行建模。我认为这是软件设计中的一个常见问题 起初,我跳转到模仿源代码管理版本控制概念的想法,并提出了一个版本化对象概念和方法,如签入、签出等。但是,我感觉它不是很“系统化”,因为我没有探索模式(即,我感觉像犯了这样的错误) 我没有涉及寻找多个解决方案等方面 研究能给我提供更可靠参考资料的文献等) 因此,我当前的问题是,对于系统建模,我

我试图对我们域中的一些对象进行建模,但遇到了一个问题,这些对象中的一些可以进行版本控制。i、 用户可以在一段时间内创建新的对象版本。所以,我需要在程序中对它们进行建模。我认为这是软件设计中的一个常见问题

起初,我跳转到模仿源代码管理版本控制概念的想法,并提出了一个版本化对象概念和方法,如签入、签出等。但是,我感觉它不是很“系统化”,因为我没有探索模式(即,我感觉像犯了这样的错误)

  • 我没有涉及寻找多个解决方案等方面
  • 研究能给我提供更可靠参考资料的文献等)
因此,我当前的问题是,对于系统建模,我需要搜索解决版本建模问题的模式,最好是在文献中。当然,要从中获得最大的好处

所以,我在谷歌上搜索了这些模式,只找到了一个。但是,我不确定这是否真的是我想要的。你们对这种模式有什么建议吗


[自我编辑]也许我没有很好地描述这个问题。您可以看到类似于源代码管理文件版本控制问题的问题。我有几种类型的对象(存储在数据库中),它们可以有几个版本。在我的应用程序中,我必须处理所有这些版本,还必须创建对象的新版本(最终将存储在数据库中)。我期待的是某种可引用的模式,我可以用它来为访问/修改/添加这些对象的新版本的接口建模。我能想到的基本接口是带有诸如签出、签入、撤消签出等方法的IversioneObject。但是,这是我观察源代码控制系统的想法。我不认为这是一种软件设计模式。因此,期待着为上述问题提供一些非常完善的设计模式。

像定制数据映射器这样的东西会不会起作用

doc = DocCatalog.get( docid, version );

假设你可以考虑每个对象在给定的时刻(时间)的对象的具体化。“版本控制”由datamapper/catalog/database负责,而不是具有“version”属性的对象;也就是说,对象不知道版本,但对象存储系统知道

在datamapper中保存/存储对象将生成新版本:

// 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 );

勾选它可能会给你一个想法你可以勾选不同的设计模式你提到的时间对象,但以防万一,请注意,有一个模式是来自于。还有,这是否回答了你的问题?