我不认为版本控制中没有特定的GoF设计模式本身,因为它存在许多实现。
版本控制的最简单的实现是对象的链表。其中列表中的每个节点都是可版本化对象的新版本。为了节省空间,您还可以实现某种diff,以显示修订版本之间的区别。这样,您可以将diff存储在数据库中,也可以存储可版本化对象的最终版本,因为版本控制系统应该能够导出两者之间的版本。
数据库模式主要看起来像这样(你可以在大多数wiki系统中看到这种模式):
+--------------------+ 1 * +-----------------------------+
| VersionableObject |---------| Diff |
+--------------------+ +-----------------------------+
| lastStateContent | | difference |
| originalAuthor | | revision |
| #dates and whatnot | | # userId, dates and whatnot |
+--------------------+ +-----------------------------+
如果你想用分支和东西去核心,你可能想考虑看看DAG这是现代分布式版本控制系统使用的。
现在,如果我们谈论你的例子,一大堆对象需要被保存在配置中。即我们必须挑选我们想要的模型的对象的修订。这意味着我们有许多关系(这是通过中介表解决的),就像这样:
+---+ 1 * +---------------+ 1 * +-----------------+ * 1 +-------+
| B |-------| Diff |-------| ModelSelection |-------| Model |
+---+ +---------------+ +-----------------+ +-------+
| revisionNo | | {PK} configId |
| {FK} configId | | {FK} modelId |
+---------------+ +-----------------+
我希望这有帮助。