【发布时间】:2015-04-30 22:40:22
【问题描述】:
我有一个 SaaS 平台,用户在该平台填写表格,然后将输入表格的数据保存到数据库中。表单 UI 有大量的配置(源自 DB,但最终以 JavaScript 结尾)和业务逻辑(以 JavaScript 编写)。填写并保存表单后,用户可以随时返回并进行编辑。
问题在于,旧表单条目的行为需要与首次填写时一样 - 它需要相同的配置和业务逻辑 - 即使 SaaS 经历了数据架构更改和业务逻辑更改然后。
为了确认,用户填写的新表单当然会使用新的/当前的数据架构和业务逻辑。但是以前的表单需要像创建时一样运行。
所以我需要一种明智的方式来版本配置、业务逻辑和任何依赖项。
我想出的最好办法是,当用户保存他们的条目时,将表单的配置与条目一起保存为 JSON。当用户返回编辑旧条目时,我不会从当前数据库模式加载配置,而只是转储与条目一起保存的 JSON 配置。
对于业务逻辑,我将系统版本号与条目一起保存,例如“01”。当用户加载旧表单时,我会检查条目的版本,然后从“js/main_01.js”之类的路径加载表单 JavaScript。当我对业务逻辑进行非向后兼容的更改时,我会将系统的版本号增加到例如“02”。然后新表单将使用“js/main_02.js”。我还将这种廉价的版本控制方法用于 HTML 视图模板,这会变得很麻烦。
这种方法有效,但似乎有点脆弱或本土化。我试图避免在我的业务逻辑中使用条件,例如if version==2: do this。这种方法避免了这种情况,但也有缺点。
我不认为堆栈对于这个 convo 真的很重要,但以防万一,我正在使用 django/mysql。
【问题讨论】:
标签: versioning backwards-compatibility data-migration saas