抽象类型与接口都是用来指定可编程抽象化的机制。抽象化指定了继承者或实现者都必须坚持的约定。抽象类型能够拥有对提供实现细节的选择权;而接口则不能够提供任何的实现细节。

不要为成员提供抽象化,除非它们已经通过开发几个具体的实现以及对抽象化进行消费的 API 而被测试。

如果你没有在真实的环境情节中对它们进行了测试的情况下承载了抽象化,那么你就很有可能在将来的版本中不引入兼容性问题的情况下错过难以修复或不可能被修复的设计问题。

在设计抽象化的时候,谨慎地在抽象类和接口之间作出选择。

关于选择抽象类型还是接口的详细讨论,请参考:[类与接口之间的选择]。

考虑为抽象化的具体实现而提供引用测试。这样的测试应该能够允许用户测试他们的实现是否正确地实现了这个约定。

引用测试是允许你检验一个接口是否被正确实现的测试。例如,对于 ICollection 的一个测试能够检验在一个实现了该接口的实例中对于 Add 方法的两次调用,同时 Count 属性的值也被增加了两次。

相关文章: