我在C#应用程序中编写了一个公共接口,它具有以下方法:
IMimic OpenMimic(string mimicPath, string frameModel, string branch, int regionId);
我还编写了一个实现此接口的抽象基类,同时,我编写了一个实现此基类的公共密封类。
现在,我需要为此方法添加一个参数,如下所示:
IMimic OpenMimic(string mimicPath, string frameModel, string branch, int regionId, IAlsContext mimicContext);
这意味着我需要对我的基类和密封实现进行更改。
现在,有一些客户端应用程序(由我的组织中的其他团队编写)使用此类并调用此方法的旧版本。如果我改变这个方法,我也被迫改变界面。
这不会打破客户吗?这是一个典型的突破性变化的例子吗?我该如何修复它以便客户不会破坏?问题是这个新参数是必需的参数,我不是接口编程专家。
谢谢,
答案 0 :(得分:6)
不会打破客户?
是的。
这是一个典型的突破性变化的例子吗?
是的。
如何修复它以便客户不会中断?
您永远不会改变客户端所依赖的公共接口。
编写一个新接口 - 可能是扩展旧接口的接口 - 并使用具有正确签名的新方法。
然后实现您的类以实现新的和旧的接口。您可能必须使用显式接口方法来执行此操作。
客户继续工作;他们可以选择按计划进入新界面。
您也可以考虑将旧界面标记为"过时"在 next 版本中,然后在之后删除版本。
问题是这个新参数是必需参数,我不是界面编程方面的专家。
嗯,现在你比昨天更了解界面编程!