任务:我正在设计一个供开发人员使用的库。

目标:我需要确保将来版本中的更改不会影响现有的开发人员。

例:

首次发行时的情况:

一堂课

public class ClassSample

{

String methodSample(String para1,String Para2, int Para3, String Para4);

}


第二次发布期间的情况:

要求:

methodSample的响应可以返回多个值。

methodSample方法中需要更多参数。

解决方案:一种方法可能只是添加另一个重载方法,该方法将具有新参数和返回对象,而不是内置数据类型。

但是上述解决方案的问题是,将来它将有太多的重载方法,太多的参数将导致过大杀伤力。

修改后的解决方案1:

void methodSample(Request request, Response response)


在每个版本中(很明显,如果需要),我将修改Request&Response类,使其具有新的其他方法来获取/设置值。这种情况下会出现问题,因为方法内部,我将无法区分调用者是Version10还是Version20。

修改后的解决方案2:

void methodSample(AbsractRequest request, AbstractResponse response)


在每个版本中,我们都可以扩展派生类,例如Request200扩展Request100扩展AbstractRequest,类似于响应类。在这种情况下,我可以通过检查实例类型来检查内部方法是调用方是Version10还是Version20。

总结修改后的解决方案2对我来说很好,您的想法呢?

最佳答案

我将使用修改后的解决方案1,但在类中添加了get / set Version方法。

您的库可以使用getVersion找出用户程序期望的行为

关于java - 如何设计Java/C#库,以便在将来发生更改时保持二进制兼容性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5700483/

10-11 00:02