接口和版本控制

时间:2008-09-05 02:15:49

标签: naming-conventions interface versioning

我正在设计一个新系统,我有很多接口随着系统的发展而增长。命名此接口的最佳做法是什么

ISomethingV01
ISomethingV02
etc

我这样做

public interface ISomething{
      void method();
}

然后我必须添加方法2所以我现在做什么?

public interface ISomethingV2:ISomething{
      void method2();
}

还是以其他方式?

5 个答案:

答案 0 :(得分:7)

我认为你的界面太过分了。

迈耶和马丁告诉我们:“开放延期,但已经关闭进行修改!”

然后Cwalina(等人)重申:

来自框架设计指南......

  

一般来说,课程是首选   构造用于暴露抽象。   接口的主要缺点是   他们的灵活性远不如   关于允许的课程   API的演变。一旦你发货   接口,其成员集是   永远固定。任何补充   接口会破坏现有类型   实现界面。

     

课程提供更多灵活性。   您可以将成员添加到该类   已经发货了。只要了   方法不是抽象的(即,时间长   因为你提供了默认值   实施方法),任何   现有派生类继续   功能不变。

alt text

答案 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的兼容性。考虑使用继承,相同接口的版本。 如果您需要引入新版本的接口,请考虑以下规则:

  

尝试为您添加有意义的后缀   接口。如果不可能的话   创建简洁的名称,考虑添加   版本号。