0

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

版本 1:客户端 <---> 接口 X1、Y1、Z1 <----> 服务器

版本 2:

客户端 <---> 接口 X2, Y2, Z2 ----> 服务器

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

请建议我实现这一目标的最佳方法。我可以参考的任何文档/设计/代码也受到赞赏。提前致谢

4

1 回答 1

2

是 wcf 服务指南的一个很好的起点。WCF 开发人员在开发时牢记版本控制,因此大多数问题都是已知的并在 wcf 文档中进行了描述

如果您的合同是可变的,而您对此无能为力,那么您可以保留旧接口并实现新接口

假设你有合同

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

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

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

您的服务可以使用不同的 URI 来维护两个合同

youraddress/service/v1
youraddress/service/v2

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

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

于 2013-04-01T07:19:09.980 回答