代码之家  ›  专栏  ›  技术社区  ›  user697911

我的代码有什么变化会导致客户的代码出现问题吗?

  •  2
  • user697911  · 技术社区  · 7 年前

    我为客户的代码提供了一个接口。有一天我更改了接口类(Java)的返回值。

    public Response getReponse(Input info){
        ....
    
        return response;
    }
    
    class Response {
        private String name;
    
        // newly added field
        private String source;
    }
    

    1 回复  |  直到 7 年前
        1
  •  3
  •   Stephen C    7 年前

    很难说你的提议是否会破坏一切 1个 .

    如果 source

    另一方面,如果存在getter或setter,则这可能会影响客户端。添加getter和setter不会破坏二进制兼容性,但仍可能获得奇怪的效果:

    • 这可能会打破 ObjectOutputStream 由于串行版本ID不匹配而导致的序列化。

    • 这可能会破坏使用反射来查看私有字段的序列化、DI等代码。

    • Response “接口”已经实现了 来源 字段,然后是 子类现在有两个独立的 来源 领域。而且您/您的客户机可能会遇到意外的重写甚至编译错误。

    还有一个问题是,您的客户实际上可能正在使用您的有线协议。所以添加一个新元素可能会破坏他们的代码。你的协议本身有版本吗?

    再说一遍,如果这是 客户代码和 服务器代码,然后控制整个软件和部署基础(即。 全部的 客户机和服务器),那么版本编号完全取决于您。你只需要处理所有的后果:-)


    为了你自己

    只是 他们的 代码。


    1-例如,不清楚您使用的“客户端”一词是指“我的付费客户之一”还是指在客户-服务器交互中以“客户端”角色使用的软件!