有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

web应用程序中的java多版本:重复还是混乱的代码?

我习惯于在Git中管理带有标记的版本。但对于独立应用程序来说,这已经是很久以前的事了。现在的问题是,我有一个web应用程序,在同一个应用程序中,可能会连接希望与不同版本的应用程序通信的客户端

因此,我以这种方式向输入中添加了版本的path变量:

@PathParam("version") String version

客户端可以在URL中指定版本:

https://whatever.com/v.2/show

然后,我在代码中添加了如下条件:

if(version.equals("v.2") {
    // Do something
}
else if(version.equals("v.3") {
    // Do something else
}
else {
    // Or something different
}

问题是我的代码变得非常混乱。所以我决定用另一种方式。我只在代码的一个点中添加了这个条件,然后根据版本调用不同的类:

MyClassVersion2.java
MyClassVersion3.java
MyClassVersion4.java

现在的问题是我有很多重复

我也想解决这个问题。我现在如何才能拥有一个web应用程序:

1) Deal with multiple versions
2) It is not messy (with a lot of conditions)
3) Doesn't have much duplication

共 (2) 个答案

  1. # 1 楼答案

    您的版本号位于URL中名为“Context Root”的位置。 您可以发布多个不同的WAR文件,每个文件都配置为在不同的上下文根上响应。 所以一场战争是为了版本1,一场战争是为了版本2等等

    这将导致代码重复。 因此,您真正要问的是,“如何有效地对Java web应用程序进行模块化?”

    这是一个大问题,它将引导您进入“企业Java”。 本质上,您需要通过将通用代码抽象到不同的应用程序来解决这个问题。通常这称为“n层”设计。 因此,您将创建一个“集成层”应用程序,您的“表示”层war文件将与之对话。 集成层包含所有公共代码,因此不会重复

    您的集成层可以是EJB或Web服务等。 或者您可以使用OSGi进行调查

  2. # 2 楼答案

    通常,当我们谈到应用程序的旧版本时,我们的意思是该版本的行为和外观是一成不变的,不会改变。如果您对该应用程序的源文件进行了哪怕是最轻微的修改,那么它的行为和/或外观可能会发生变化(根据墨菲定律,它将发生变化),这是不可接受的

    因此,如果我是你,我会将旧版本的所有源文件锁定在源代码存储库中,这样就没有人可以提交它们,永远。这种方法解决了这个问题,并规定了您必须如何处理其他所有事情:每个版本都必须有自己的源文件集,这些源文件集与所有其他版本的源文件完全无关

    现在,如果应用程序的旧版本必须与最新版本有一些共同之处,并且这一点发生了变化(比如数据库),那么我们并不是在讨论应用程序的不同版本,我们有一些更类似于不同皮肤的东西:应用程序的核心不断发展,但不久前挑选皮肤的用户可以坚持使用该皮肤。在这种情况下,其他人已经提出的多态性解决方案可能是一种更好的方法