如何做到数据存储库和应用程序版本的工作再/J
-
20-08-2019 - |
题
一个可部署的几个版本相同的应用程序上再/J,但如何不会再/J处理的事实,不同的版本可以使用不同的数据存储(与可能不相容的)计划?
例如:
假设上第1版的我应用程序,我有一只像(我已经离开了几个细节为简单起见):
public class User {
private String key;
private String username;
private Integer phoneNumber;
}
现在假设上,第2版,我想到使用:
public class User {
private String key;
private String username;
// on this version, replaced 'phoneNumber' by:
private String eMail;
}
现在有两个问题:
如果部署这两个版本om再/J,什么样的架构,我看到,在数据储存?
什么有关数据自己?如果我添加一个用户在第2版,我会看到其数据的数据存储库的版本1?
解决方案
引述 文档,
不同关系数据库、应用程序 引擎数据库不需要那个 所有实体的定一种有 同的性质。该应用程序可以 指定和强制执行其数据模型 使用图书馆包括与软件开发工具包 或者其自己的代码。
这也被称为"软架构"--的数据存储库不是真的 做 模式,但可以或多或少有一些模拟软种模式,通过应用程序级别代码(你自己,或在库)。
所以如果你(通过图书馆或在自己的代码)的强制执行约束的说:"这个特性必须",以及某些实体实际上并没有这种属性(因为这是插入基于不同的"软架构",例如一个不同版本的应用程序),然后你会得到什么异常的应用程序级别的代码或图书馆选择使用以表明违反了这一软约束,在其约束。
如果你表达没有这样的约束,然后,一个属性,是缺将不得不默认值提供通过代码或图书馆,或者"默认",其中我相信是通常 null
在Java或 None
在蟒蛇。
注意,不同版本的程序可能使用不同的运行(有些可能是Java和其他人可以Python)和不同的运行时将 仍然 使用相同的数据存储库,使Java vs蟒蛇的区分是不重要的在这里。
在你的具体例子(没有提供默认和不断有关的强制性存在)我想添加一个用户可从任何一个版本将使它可从其他的,与缺少的特性看作是 null
(但有可能是限制因素,我不知道,在这种情况下的一种例外的结果应当图书馆尝试,以验证这些制约因素,并认为他们被侵犯).
一般而言,我就不会担心添加"任选的"属性(那些可以合法地被丢失/null
/None
, 或者有明确的默认在这些情况下,使实体书面通过的旧版本仍然是正确的可读),但其他种类的变化(使先前失踪或可选择的属性是强制性的,而不是添加其他限制因素,等等)可能需要某种形式的"数据库迁移"(可能通过的安全数据连接器)或"应用程序级别黑客对于传统的兼容性"如果一个移徙仅仅是不可行的。
迁移可能是不可行的,特别是,如果你需要能够返回到以前的应用程序的版本,例如(事实上,在这些情况下,其他作业成为有问题的,例如删除的制约变成只是为有问题作为增加它们,因为旧的版本可能是无法处理数据输入一个新的违反的约束,这已被删除,在新的版本)。
因此,它不必是一个简单的问题在实践中,但它仍然有助于它认为这种方式:数据储存本身没有架构,只有我的程序和/或图书馆,它选择使用强制执行任何限制都需要在应用程序级别上潜在的实体,就其本身而言,每个真正具有任意设置的属性--"软架构",应用程序级架构,没有"实际的"架构中的基本数据层。