我试图构建一个框架,允许人们通过实现一个接口来扩展我们的核心功能。下面是这个界面的一个简单例子。方法参数与参数对象
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代码 - 我不想我到达使溶液第三方开发者畏缩
我甚至不知道要问什么问题在线获取有关此问题的指导。我有一种感觉,答案是“它取决于”(关于p1-p5与GetData()函数的目的是如何相关的),但是有人能指出我应该请求帮助我评估的问题列表一种解决方案是否比另一种更好?
对于参数类型有一个接口是一个好主意,但考虑到接口不能被版本化,如果API会传播,那么没有人可以在不破坏存在的情况下向参数类型添加加号功能(比如再添加一个参数)码。 –