什么';对于与每个版本都在变化的外部API一起工作的Java代码来说,它是一个很好的组织?

什么';对于与每个版本都在变化的外部API一起工作的Java代码来说,它是一个很好的组织?,java,Java,具体来说,我使用的是一个JSON RPC API。该规范可能会在API的版本之间发生变化,但我始终可以在连接时知道它是什么版本。我有大约30个wrappers方法,它们利用了可用的JSON RPC方法 您是否会在任何地方插入switch语句,以调用某些内容的方式进行更改?或者编写全新的方法,使其更易于管理,即使API的大多数函数没有更改,您的代码也不必更改 编辑:我忘了提到我想让我的代码与这个API的多个版本一起工作,即,我不能只更新我的代码以与版本2.0一起工作,因为我可能想在提供该服务的版本

具体来说,我使用的是一个JSON RPC API。该规范可能会在API的版本之间发生变化,但我始终可以在连接时知道它是什么版本。我有大约30个wrappers方法,它们利用了可用的JSON RPC方法

您是否会在任何地方插入switch语句,以调用某些内容的方式进行更改?或者编写全新的方法,使其更易于管理,即使API的大多数函数没有更改,您的代码也不必更改


编辑:我忘了提到我想让我的代码与这个API的多个版本一起工作,即,我不能只更新我的代码以与版本2.0一起工作,因为我可能想在提供该服务的版本为1.8的其他服务器上使用它。

听起来像是一个继承作业


每个版本都可以有一个基类或接口和子类。如果有帮助的话,您甚至可以对这些子类进行子类化,例如,如果有一个只更改一种方法的point release。

我会将外部API隐藏在您自己的内部接口后面,然后让实现处理外部API的特定版本


换句话说,在您和外部API之间添加另一层。

您可以使用相同的数据访问对象思想来组织代码。数据访问对象是一个单独的类,它具有查询数据库和从中检索数据的方法。例如,如果您有一个名为Person的类,Person类需要访问数据库以获取诸如电话号码、名字、姓氏等数据。它可以使用此DAO(数据访问对象的缩写)来获取这些值。它的优点是,假设您的老板让您将数据库从MySQL更改为MongoDB。然后您不必更改Person类中的任何代码,只需修改DAO类以使用MongoDB而不是MySQL。我的建议是创建一个为您正在使用的外部API构建的类,并使应用程序中的所有类都使用该类与外部API交互。每当API更新时,您只需要修改(修复)这个类,而不必接触任何其他类。我希望你已经理解了我的意思=)

你能把这些乱七八糟的东西放在一个固定的接口后面吗,或者它的功能也会改变吗?这个服务没有我可以在代码中使用的接口。网页上列出了其服务支持的JSON RPC方法的已发布列表。它的功能大致保持不变。我正在寻找一种方法来组织事物,使它们保持清晰和可维护性。您可以编写一个承诺功能的接口,然后为每个版本的服务器编写几个实现。在运行时,您可以确定要使用哪个实现。就像@dicarlo2建议的那样。我不确定这项服务的“接口”是否会改变。我的代码中没有使用Java接口,也没有用于此服务的接口。有一个网页,其中列出了可用的JSON RPC方法。我已经有了另一层——我自己用Java编写的方法,这些方法调用提供的RPC方法,但我正在着手处理版本更改的可能性。我在寻找更多的设计模式或实际代码来建议如何布局。请参阅,以更深入地了解我的建议。