asp.net-mvc - 为什么任何一种抽象都使用接口(interface)而不是抽象类?

标签 asp.net-mvc oop repository interface abstract-class

嘿嘿,

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

我是 MVC 的忠实粉丝,就我而言,是 ASP.Net Mvc。

我注意到的是关于接口(interface)的炒作。每一个视频、教程和书籍似乎都用接口(interface)解决了任何类型的抽象问题。我已经适应了这些模式,理解了原因和方式,我基本上对此非常满意。

但我只是不明白为什么到处都使用接口(interface)。我几乎从未见过用抽象基类完成一些抽象,我不明白。也许我错过了什么?我知道你只能从一个基类继承,而多个接口(interface)是可能的。但是接口(interface)确实有缺点,尤其是当需要进行一些更改时,这会破坏您的实现。
到目前为止,在我的项目中,我只习惯于为完全不同的类选择接口(interface)。

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

请指出我大脑落后的部分:)

最佳答案

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

首先,可测试性设计学派使用各种方式的接口(interface),因为他们希望能够模拟任何被测试的组件。如果你使用具体的类,那么很多模拟工具不能模拟这些类,因此很难测试你的代码。

关于asp.net-mvc - 为什么任何一种抽象都使用接口(interface)而不是抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2161751/

相关文章:

git - 在另一个 git 存储库的父文件夹中创建一个 git 存储库并删除子存储库,但将其历史记录集成到父存储库中

c# - 如何使用 Ajax 从部分 View 更新父表

javascript - 防止 MVC 中的多次提交

language-agnostic - "program to an interface"是什么意思?

git - 如何仅将单个分支从一个 git repo 复制到另一个?

c# - 如何使用存储库模式搜索子类?

asp.net-mvc - 如何在 ASP.NET MVC 中访问 AJAX 哈希值?

c# - 将图像转换为不同格式后,应用程序不断返回空文件

c - C 中的面向对象模式?

c++ - 声明后初始化对象时“不匹配调用”