java - 为 2 版本的数据模式设计 Web 界面

标签 java user-interface versioning

我正在设计一个支持 2 个或更多版本数据模式的 Web 界面。 JAVA 中表示的数据模式可能看起来像

PersonV1 {
  String fname
}

PersonV2 {
  String fname
  String lname
  String email
}

我预计将来会添加新版本。对于如何根据 DRY 原则等构建这种 UI,是否有任何最佳实践?

关于此的一些背景知识。我们有一个产品 A,对于这个产品的每个版本,我们可能有不同的架构。因此,我为每个实例版本创建了一个新模式。然后通过 jaxb 将该模式制作成一堆 Java 对象并存储为一个库。每次有新版本的产品 A 时,都会重复此过程。

产品 B 将使用库并从产品 A 获取 xml,因为我们知道它来自哪个版本,我们将能够填充正确的对象并将它们用作某种意义上的领域对象用户界面。

谢谢

最佳答案

根据 Web 界面客户端的类型和多样性,您可以采用两条路线:

  1. 将架构版本信息添加到路径或每个对象中。然后,每个客户端都必须将特定模式版本的对象转换为它可以使用的形式。对于比客户端软件更新的版本,最安全的方法可能是完全拒绝它。

  2. 让客户端在对服务器的请求中指明其首选/唯一接受的架构版本。然后由服务器决定是从其当前模式转换为客户端请求的模式,还是失败并返回 400 指示请求的模式不受支持。

所以,假设您有一个只关心 fname 的 Web 客户端。在接收到 Person 时,无论模式版本如何,它都会提取 fname 并继续。

假设另一个网络客户端需要电子邮件地址。它将接受 v2 人物对象,但如果返回 v1 人物,则通知用户服务器不兼容。

最后,假设 v3 将 fname 和 lname 替换为 name。在这种情况下,可以通过附加 fname 和 lname 将 v2 转换为 v3,也许可以通过在空间上拆分名称将 v3 转换为 v1,但是从 v1 到 v3 可能很难做一些有意义的事情。

显然会有很多情况,客户端或服务器必须放弃并简单地报告服务或客户端不兼容。但是,由于您是从头开始设计服务并考虑到变化,因此您希望对架构更改投入更多的思考和谨慎。

有很多流行的文件格式标准都在努力解决这类问题。例如,Zip 文件格式有多个修订版。生产者和消费者都必须有一个策略来处理特定版本的文件格式。 Java 二进制类格式是另一个例子。

关于java - 为 2 版本的数据模式设计 Web 界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4159170/

相关文章:

java - Java数据结构中的搜索函数

java - 默认 java 任务的 Ant 类路径上有什么(fork 设置为 "false")

python - 如何使用 Python 与窗口的 GUI 交互?

c# - .Net 发行商策略——原始发行商策略文件?

google-cloud-platform - 您可以调用特定版本的 Google Cloud 函数吗?

naming-conventions - 迭代的最佳名称集?

java - Springboot : Localhost:8080 results in Whitepage-Error instead of showing content

java - 将静态成员委托(delegate)给扩展类 - Java

objective-c - 用于向表中添加条目的标准 UI

python - PyQt/PySide 中是否有默认图标?