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