我需要为现有接口上的函数创建重载,而不会影响当前实现或使用该接口(理想情况下)的任何组件。向接口添加新功能
我想我有几个选择:
简体 原始界面:
public interface IServerComponent
{
bool Add(int a, int b);
}
我可以添加新的重载函数的接口,并迫使每一个实现接口的类实施新功能。
public interface IServerComponent
{
bool Add(int a, int b);
bool Add(int a, int b, int c);
}
或者我可以创建一个实现原始接口的新接口。然后,其他类,利用原有的不需要改变任何新的类可以实现新的界面...
public interface IServerComponent2 : IServerComponent
{
bool Add(int a, int b, int c);
}
什么是最好的做法是这样的情况吗?还有其他选择吗?
感谢
+1提的扩展方法 – ram 2010-07-15 13:51:08
扩展方法将工作,但也会有分散到其他班级的凝聚力降低实现类的功能的效果。我认为这是最好的临时解决方案。在无法扩展类的情况下,因为您无法访问源,所以扩展方法是有意义的。我可能以这种方式对现有代码库进行微小更新,但我肯定会将其放在下一个主要版本的重构列表中。 – tvanfosson 2010-07-15 13:58:51
这完全取决于设计。如果您添加*新功能*,那么我会同意;它属于一个接口。如果你添加*超载*(例如,几乎相同的功能,总是表达其他功能),然后我不同意。在这种情况下,扩展方法允许*正交性,减少代码重复。 [Joe Duffy](http://www.bluebytesoftware.com/blog/2010/02/10/ExtensionMethodsAsDefaultInterfaceMethodImplementations.aspx)在这个主题上有一篇很好的博客文章。 – 2010-07-15 14:10:30