我正在尝试构建一个框架,允许人们通过实现接口来扩展我们的核心功能。下面是这个接口的一个简化示例。
public interface MyInterface
{
IData GetData(string p1, char p2, double p3);
}
最近,我们决定修改这个接口(我知道我不应该破坏依赖代码,但事实是我们还没有任何第三方实现这个接口,所以我们有机会“重做”正确实现此接口)。
我们需要在这个界面中再添加 2 个参数,我们的软件才能正常工作。我们正在考虑的两种方法是将它们添加到签名中,如下所示:
public interface MyInterface
{
IData GetData(string p1, char p2, double p3, bool p4, DateTime p5);
}
或通过创建这样的参数对象
public class MyParameters
{
public bool p4 { get; set; }
public DateTime p5 { get; set; }
}
并将它们添加到方法的末尾,如下所示:
public interface MyInterface
{
IData GetData(string p1, char p2, double p3, MyParameters p4);
}
我正在寻找某种指导,说明哪种方式是“最”正确的继续方式。我可以看到这两个类别的优缺点,但我不希望我的偏见导致我走错路。
我的一些主要担忧是:
- 软件的可扩展性——我希望用户能够通过实现接口来做我还没有想到的事情
- 可维护性 - 理想情况下,我不想再接触负责再次调用 GetData() 的代码
- 清洁 API - 我不希望我得到的解决方案让第 3 方开发人员畏缩
我什至不知道在网上问什么问题来获得这个问题的指导。我有一种感觉,答案是“取决于”(取决于 p1-p5 与 GetData() 函数的目的之间的相关性),但有人可以指出我应该问的问题列表以帮助我评估一种解决方案是否比另一种更好?