使用接口作为参数而不是类?

时间:2017-03-17 22:32:23

标签: c# interface

在过去的几年里,我看到了很多不同的编码模式,我对不同商店和程序员之间的巨大差异感到震惊。在我以前的雇主中,几乎每个类都有一个已定义的接口,即使只有一个类实现了该接口,接口也被用作参数而不是类本身。

在我现在的雇主那里,界面几乎闻所未闻,我认为我从未见过定义过的自定义界面。因此,课程几乎完全传递。

我理解接口是一个定义类将实现什么成员和函数的契约,但是有没有真正的理由为某些/大多数类定义接口,这些类永远不会与其他类共享相似之处?

例如,我们的大部分操作都是简单的CRUD操作。在我们处理报告和其他任务时,几乎每个操作都是某种插入,更新,删除或选择。我们的数据模型往往与我们的基础级数据库结构非常相似。当我们通过应用程序层向上移动时,我们可能会组合或更改某些对象以包含相关属性,但一切都非常线性。

我只是很难看到为什么接口在我们的情况下会如此好用,而我的上一家公司则严重依赖它们。

1 个答案:

答案 0 :(得分:2)

实现接口然后传递它们的所有类的主要好处是它大大增加了为单元测试模拟它们的难易程度。

如果你总是传递具体的类,那么模拟必须从它们派生出来。如果他们没有虚拟成员,那么模拟不能覆盖任何行为,即使虚拟成员,您也可以从基类中获得不会产生副作用的代码。想要在那种环境中。

接口不存在这些问题,干净的模拟非常容易(尤其是像NSubstitute这样的框架)。这些接口还允许实现各种模式,如策略,并帮助支持开放原则(以及其他)。

当然,每个类的接口看起来都有点矫枉过正,但至少围绕每个进程外部接口类的接口都是优秀的练习。