为什么.NET应用程序中使用的接口如此丰富?

Luk*_*ett 13 .net architecture coding-style

最近,我开始研究一个大型的主流项目,为一个我无法透露的客户提供面向公众的电子商务平台.

我和经验丰富的开发人员合作,他们在伦敦金融城的许多项目中拥有多年的经验.

似乎每个人都在很大程度上进入接口.这是压倒性的,我现在怀疑我以前做过的所有事情,即使用抽象基类.

.NET不是COM,它不是基于接口的编程平台.我是否遗漏了某些东西,或者这只是一种群体心态 - 多年的编程已经成为.NET领域公认的规范?

谢谢

卢克

Jon*_*eet 20

接口促进松耦合,易于模拟.它们使API和实现之间的分离非常清晰.

当然,当不同的实现之间存在共同的功能时,你可以使用抽象基类(如果你愿意的话,抽象类之上仍然可以有一个接口)但是如果抽象类中的所有内容都是抽象的,那么没有字段,为什么要通过抽象类来消耗你的继承?好处在哪里?

  • @Jon - IComparable是一种行为 - 它永远不会是一个基类; 我认为你误解了基类的正确和错误使用.我不敢相信我在和你争论.但是我在微软这边. (3认同)
  • @Luke - 我认为这不是"官方"指南,而"Stream"是一个不好的例子,因为抽象基类有很多实现 - 即你可以通过覆盖少数*来实现`Stream`*事情,或通过压倒**很多东西. (2认同)
  • 像这样的书,由编写BCL的人写的,由.NET的"众神"贡献,如此轻易打折让我很难过,Marc. (2认同)
  • 当然,我看到在库之间共享类型的任何地方,并且通常在它们不在的地方,程序员从接口开始.这份合同我8比1.对于一切都有接触 - 我的预感是它是一种社会现象+单元测试指导糟糕的架构决策. (2认同)
  • @LukePuplett:在我看来,你已经"问了一个问题",以便传播你自己的观点,这不是网站的重点.界面可以被滥用吗?绝对.他们也可以*未被充分利用*吗?绝对.我不确定你在哪里得到".NET团队打算让基类改变多态性接口"的想法甚至是什么意思.但我仍然认为将API从实现中完全分离有很多好处. (2认同)

Rus*_*ell 0

使用接口在很大程度上是一种面向对象的范例。接口可以抽象实现,以允许更全面的测试、可扩展性以及更轻松地构建基于组件的(这使得应用程序更具可扩展性)应用程序。

当然,接口的使用将根据需求而变化(例如,非功能性:必须能够为 n 层应用程序的每一层构建单元测试)。

多个开发人员可以在同一个应用程序上工作,而不关心其他开发人员将如何实现他们的组件,但知道要发送什么以及期望再次返回什么。

基类相对于接口的优点之一是您可以共享特定层中所有对象的功能(例如分层架构)。例如。验证公共字段或转换常用数据类型。