11

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

ISomethingV01
ISomethingV02
etc

我这样做

public interface ISomething{
      void method();
}

那么我必须添加方法2所以现在我该怎么办?

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

还是其他方式?

4

5 回答 5

7

我认为您正在过度使用接口。

Meyer 和 Martin 告诉我们:“对扩展开放,对修改关闭!”

然后 Cwalina (et al) 重申:

从框架设计指南...

一般来说,类是公开抽象的首选结构。接口的主要缺点是,在允许 API 演变方面,它们的灵活性远低于类。一旦你发布了一个接口,它的成员集就永远固定了。对接口的任何添加都会破坏实现接口的现有类型。

一个类提供了更多的灵活性。您可以将成员添加到已发布的类中。只要该方法不是抽象的(即,只要您提供该方法的默认实现),任何现有的派生类都将继续保持不变。

替代文字

于 2008-09-05T02:47:38.310 回答
5

理想情况下,您不应该经常更改界面(如果有的话)。如果您确实需要更改接口,则应重新考虑其用途并查看原始名称是否仍然适用于它。

如果你仍然觉得界面会发生变化,界面变化很小(添加项)并且你可以控制整个代码库,那么你应该只修改界面并修复所有编译错误。

如果您的更改是接口使用方式的更改,那么您需要创建一个单独的接口(很可能具有不同的名称)以支持该替代使用模式。

即使您最终创建了 ISomething、ISomething2 和 ISomething3,接口的使用者也很难弄清楚接口之间的区别。他们什么时候应该使用 ISomething2,什么时候应该使用 ISomething3?然后你必须进行淘汰 ISomething 和 ISomething2 的过程。

于 2008-09-05T02:29:49.770 回答
4

我同意Garo Yeriazarian的观点,改变界面是一个严肃的决定。此外,如果您想推广使用新版本的界面,您应该将旧版本标记为过时。在 .NET 中,您可以添加ObsoleteAttribute

于 2008-09-05T02:39:33.070 回答
2

接口的目的是定义类型必须实现的抽象模式。

最好实现为:

public interface ISomething

public class Something1 : ISomething
public class Something2 : ISomething

通过创建同一接口的多个版本,您不会以代码可重用性或可扩展设计的形式获得任何东西。

于 2008-09-05T02:18:39.923 回答
2

我不知道为什么人们不赞成你的帖子。我认为良好的命名准则非常重要。

如果您需要保持与 prev 的兼容性。同一接口的版本考虑使用继承。如果您需要引入新版本的接口,请考虑以下规则:

尝试为您的界面添加有意义的后缀。如果无法创建简洁的名称,请考虑添加版本号。

于 2008-09-05T02:20:27.923 回答