我正在设计一个新系统,并且我有很多接口会随着系统的推移而增长。命名此接口的最佳做法是什么
ISomethingV01
ISomethingV02
etc
我这样做
public interface ISomething{
void method();
}
那么我必须添加方法2所以现在我该怎么办?
public interface ISomethingV2:ISomething{
void method2();
}
还是其他方式?
我正在设计一个新系统,并且我有很多接口会随着系统的推移而增长。命名此接口的最佳做法是什么
ISomethingV01
ISomethingV02
etc
我这样做
public interface ISomething{
void method();
}
那么我必须添加方法2所以现在我该怎么办?
public interface ISomethingV2:ISomething{
void method2();
}
还是其他方式?
我认为您正在过度使用接口。
Meyer 和 Martin 告诉我们:“对扩展开放,对修改关闭!”
然后 Cwalina (et al) 重申:
从框架设计指南...
一般来说,类是公开抽象的首选结构。接口的主要缺点是,在允许 API 演变方面,它们的灵活性远低于类。一旦你发布了一个接口,它的成员集就永远固定了。对接口的任何添加都会破坏实现接口的现有类型。
一个类提供了更多的灵活性。您可以将成员添加到已发布的类中。只要该方法不是抽象的(即,只要您提供该方法的默认实现),任何现有的派生类都将继续保持不变。
理想情况下,您不应该经常更改界面(如果有的话)。如果您确实需要更改接口,则应重新考虑其用途并查看原始名称是否仍然适用于它。
如果你仍然觉得界面会发生变化,界面变化很小(添加项)并且你可以控制整个代码库,那么你应该只修改界面并修复所有编译错误。
如果您的更改是接口使用方式的更改,那么您需要创建一个单独的接口(很可能具有不同的名称)以支持该替代使用模式。
即使您最终创建了 ISomething、ISomething2 和 ISomething3,接口的使用者也很难弄清楚接口之间的区别。他们什么时候应该使用 ISomething2,什么时候应该使用 ISomething3?然后你必须进行淘汰 ISomething 和 ISomething2 的过程。
我同意Garo Yeriazarian的观点,改变界面是一个严肃的决定。此外,如果您想推广使用新版本的界面,您应该将旧版本标记为过时。在 .NET 中,您可以添加ObsoleteAttribute。
接口的目的是定义类型必须实现的抽象模式。
最好实现为:
public interface ISomething
public class Something1 : ISomething
public class Something2 : ISomething
通过创建同一接口的多个版本,您不会以代码可重用性或可扩展设计的形式获得任何东西。
我不知道为什么人们不赞成你的帖子。我认为良好的命名准则非常重要。
如果您需要保持与 prev 的兼容性。同一接口的版本考虑使用继承。如果您需要引入新版本的接口,请考虑以下规则:
尝试为您的界面添加有意义的后缀。如果无法创建简洁的名称,请考虑添加版本号。