【问题标题】:Make software to change its behavior as per the version selection使软件根据版本选择改变其行为
【发布时间】:2013-04-01 07:05:54
【问题描述】:

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

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

版本 2:

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

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

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

【问题讨论】:

    标签: c# .net wcf client-server


    【解决方案1】:

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

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

    假设你有合同

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

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

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

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

    youraddress/service/v1
    youraddress/service/v2
    

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

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

    【讨论】:

    • 感谢 ArsenMkrt 的指导。为了更详细地研究,合同 - 接口由第三方提供。这是所有公司都应该遵循的标准。所以我们无法控制接口。我们需要实施和支持它们。有什么方法可以在不进行太多更改的情况下同时符合两个版本的接口?
    • 保留两个合同有什么问题?在这种情况下你可以有两个接口并保留两种情况的实现,它不一定会带来代码重复,你可以在一个服务中实现它或有一些帮助类
    • 感谢您理解我的问题。能不能再啰嗦一点?由于我没有做过太多的设计工作,如果您能举一些例子或指出一个我可以查看的地方,我将不胜感激?
    • 我编辑了一个帖子,希望这有意义,请说明哪个部分是你的问题,我会尽量回答得更清楚
    • 我想我明白了..非常感谢您的帮助 :)
    猜你喜欢
    • 2013-08-17
    • 2017-11-06
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多