-
09-06-2019 - |
题
我正在设计一个新系统,我有很多接口,它们会随着系统的时间而增长。命名此接口的最佳实践是什么
ISomethingV01
ISomethingV02
etc
我这样做
public interface ISomething{
void method();
}
那么我必须添加方法 2 那么现在我该怎么办?
public interface ISomethingV2:ISomething{
void method2();
}
或者同样的其他方式?
解决方案
理想情况下,您不应该经常更改界面(如果有的话)。如果您确实需要更改接口,您应该重新考虑其用途并查看原始名称是否仍然适用。
如果您仍然觉得界面会发生变化,并且界面变化很小(添加项目)并且您可以控制整个代码库,那么您应该只修改界面并修复所有编译错误。
如果您的更改是接口使用方式的更改,那么您需要创建一个单独的接口(很可能使用不同的名称)来支持该替代使用模式。
即使您最终创建了 ISomething、ISomething2 和 ISomething3,界面的使用者也将很难弄清楚这些界面之间的差异。他们什么时候应该使用 ISomething2,什么时候应该使用 ISomething3?然后你必须着手废弃 ISomething 和 ISomething2 的过程。
其他提示
我认为你过度滥用接口。
迈耶和马丁告诉我们:“开放扩展,关闭修改!”
然后 Cwalina(等人)重申:
从框架设计指南...
通常,课程是揭示抽象的首选构造。接口的主要缺点是,在允许API的演变方面,它们的灵活性要比类要少得多。一旦您运送界面,其成员的集合将永远固定。接口的任何添加都会破坏实现接口的现有类型。
类提供了更大的灵活性。您可以将成员添加到已经发货的课程中。只要该方法不是抽象的(即,只要您提供该方法的默认实现),任何现有的派生类都将继续保持不变。
接口的目的是定义类型必须实现的抽象模式。
最好实施为:
public interface ISomething
public class Something1 : ISomething
public class Something2 : ISomething
通过创建同一接口的多个版本,您不会获得任何代码可重用性或可扩展设计的形式。
我不知道为什么人们对你的帖子投反对票。我认为好的命名准则是 非常 重要的。
如果您需要保持与上一个版本的兼容性。同一接口的版本考虑使用继承。如果您需要引入新版本的界面,请考虑以下规则:
尝试在接口中添加有意义的后缀。如果无法创建简洁的名称,请考虑添加版本号。