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