使软件根据版本选择改变其行为

本文关键字:改变 选择 版本 软件 | 更新日期: 2023-09-27 18:06:41

我有一个像服务器一样的软件。客户端通过公开的接口与该软件通信。我们公司想在我们的软件中引入新功能。

版本1:客户& lt;——>界面(X1, Y1), Z1 & lt; ->服务器

版本2:

客户& lt;——>界面X2, Y2, Z2 ->服务器

客户端希望能够随时切换到旧版本。当然,如果他们想切换到不同的服务器版本,他们会将界面更改为旧版本。我们公司希望我们有一个下拉菜单来选择不同的版本。选择最新版本应该暴露新特性。选择以前的版本应该会隐藏新特性。现在的问题是,新功能也会修改现有功能的行为!已经更改了一些公开的接口。这包括现有方法签名的更改、一些方法的删除和一些新方法的添加。但是没有对现有方法中的主要代码进行更改。无论何时切换版本,客户端软件都将进行更改以适应服务器的更改。我们的服务器代码维护是主要的关注点,因为代码库非常大。因此,我们的公司既不希望我们添加if/else条件检查来实现这一目标,也不希望我们添加代码复制。该软件是用c#编写的。NET 3.5 &WCF。客户端使用SOAP与该软件通信。

请建议我实现这个目标的最佳方法。我可以参考的任何文档/设计/代码也很感激。提前感谢

使软件根据版本选择改变其行为

这是wcf服务指南的一个很好的起点。WCF开发人员在开发时牢记版本控制,因此大多数问题在WCF文档

中都是已知和描述的。

如果你的契约是可变的,你不能做一些事情,那么你可以保留旧的接口并实现新的接口

假设你有合同

interface IContractV1
{
   void M();
   void N();
}

现在在第二个版本中,您想要删除一个方法,并添加另一个

interface IContractV2
{
   void M();
   void P();
}

您的服务可以使用不同的uri来保持这两个契约。

youraddress/service/v1
youraddress/service/v2

现在旧客户端可以连接到旧服务,新客户端可以连接到新服务

请注意,您可以重用数据契约,如指南中所述,但同样不能从其中删除任何属性