除了开发人员之间的协调之外,是否有理由使用抽象或接口

本文关键字:有理由 是否 接口 抽象 开发 之间 协调 | 更新日期: 2023-09-27 18:30:06

可能重复:
接口与抽象类(通用OO)

我可以看到他们在协调开发团队或其他人可能进一步开发的代码方面的优势。

但如果没有,有理由使用它们吗?如果我省略它们会发生什么?

摘要-我可以实例化它。没问题。如果这没有意义——我不会。

接口——无论如何,我在所有派生自它的类中都声明了该功能。

注意:我不是问它们是什么。我在问,除了协调之外,它们是否对任何事情都有帮助。

除了开发人员之间的协调之外,是否有理由使用抽象或接口

两者都是我所说的合同,单个开发人员可以以以下方式使用:

摘要

  • 允许对不同的派生实现进行多面主义
  • 允许创建基本功能,这些功能可以由派生类需要实现的或非指定
  • 如果派生操作未实现或需要实现,则允许在运行时使用默认操作
  • 提供派生对象之间的一致性,基类指针可以利用这些派生对象,而不必具有实际派生对象;因此允许对来自基类引用的派生对象进行泛型操作,类似于运行时操作中的接口

接口

  • 允许将通用使用模式作为默认contract of operation(s)。这种用法可以针对手头的流程,并允许为这份合同进行精确的手术
  • 用于帮助工厂模式(返回的对象),在单元测试和替换现有类的能力(比如从返回接口的工厂)不会因为遵守接口合同而给工厂的任何消费者带来重构的任何痛苦
  • 提供了一种使用模式,该模式可以从类的其余实现的静态模式中轻松理解

长话短说,他们需要完成一项工作吗?编号

但是,如果你热衷于设计寿命超过一个周期的系统,从长远来看,无论是团队还是个人,上述架构师的前期工作都会有回报。


++更新

我确实实践了我所宣扬的,当把一个项目交给其他开发人员时,说很好

  1. 看看所有主要业务类都遵循的接口IProcess。该过程定义了一个目标系统,可以帮助您以定义的方式理解业务逻辑的目的和执行
  2. 在维护和向项目添加新功能的同时,接口实际上帮助我记住了流程,并轻松地将新的业务逻辑添加到项目中

我认为如果你不与他人协调,它会做两件事

  1. 有助于防止您对自己的代码做一些奇怪的事情。想象编写一个类,并在多个项目中使用它。你可能会进化它在一个项目中,因此无法从中的表亲那里辨认出来另一个项目。拥有一个抽象类或接口会让你在更改函数签名时要三思
  2. 它给了你前进的灵活性——这里有很多经典的例子。使用你试图完成的事情的一般形式,如果你决定以后需要另一种(流媒体阅读器是很好的例子,对吧?)以后可以更容易地实现它

抽象-您可以实例化它的子级,但更重要的是,它可以有自己的抽象方法和字段。

接口-在抽象方面更"粗糙",但在.NET中,可以有多重继承。因此,通过定义接口,您可以引导接口的消费者订阅不同的合同(接口),从而呈现指定类型的不同"形状"。

即使您没有与任何人协调,也有很多理由使用这两种构造。主要用途是两者实际上都有助于表达开发人员的意图,这可能有助于您以后弄清楚为什么选择实际选择的设计。它们还可以允许进一步的可扩展性

抽象类允许您定义一个通用实现,该实现将在许多派生类之间共享,同时将一些行为委派给子类。它允许DRY(不要重复自己)原则来避免在任何地方重复相同的代码。

接口表示您的类实现一个特定的约定。这在框架内有非常有用的用途,其中包括:

  • 使用库功能,需要实现某些接口。例如IDisposable、IEquatable、IEnumerable。。。

  • 泛型中约束的使用。

  • 允许对接口进行模拟(如果您进行单元测试),而不必实例化真实对象。

  • COM对象的使用