为什么任何类型的抽象都使用接口而不是抽象类?

Ste*_*fen 4 oop asp.net-mvc abstract-class interface repository

Heyho,

我心中有一段时间有一个问题,希望你们中的一些人可以迅速解决这个问题:

在我的案例中,我是MVC,ASP.Net Mvc的忠实粉丝.

我注意到的是关于接口的炒作.每个视频,教程和书籍似乎都可以通过接口解决任何类型的抽象问题.我已经调整了这些模式,理解了为什么以及如何,我基本上对它非常满意.

但我不明白为什么界面到处使用.我几乎从未见过抽象基类的抽象,我不明白.也许我想念一些东西?我知道你只能从一个基类继承而多个接口是可能的.但是接口确实有缺点,特别是当需要进行一些更改时,这会破坏您的实现.到目前为止,在我的项目中,我只习惯为完全不同的类选择接口.

例如,整个存储库模式可以使用抽象基类完成,仍然提供可测试性和可交换性,还是我错过了什么?

请指出我脑子滞后的部分:)

Gra*_*ton 6

接口用于教程,博客和其他地方,因为这些作者特别受到一组称为"可测试性设计"的方法的影响.

首先,可测性学校的设计使用各种方式的接口,因为他们希望能够模拟测试下的任何组件.如果你使用具体的类,那么很多模拟工具都无法模拟这些类,因此会很难测试你的代码.

  • +1来抵消毫无根据的downvote.是的,您仍然可以在使用抽象类时进行测试,但是通过模拟**的可测试性是编程接口的合法且常见的原因. (3认同)