避免违反重复使用的抽象原则

时间:2012-06-05 09:21:09

标签: .net dependency-injection

在依赖注入中,我们针对抽象进行编程。

根据我的经验,我可以说应用程序中的大多数抽象与它们的实现有1:1的关系。这违反了重用抽象原则

Mark Seeman在他的一些帖子中建议我们可以对抽象进行空对象实现,以避免 RAP 违规(Mark Seeman的这个建议可能是我的推论。请纠正我,如果我引用马克的说法我错了。我的问题是。

  1. 如何实现Null对象?
  2. 是否可以违反RAP?

1 个答案:

答案 0 :(得分:16)

就个人而言,即使 只有一个生产实现,我觉得编程为抽象也很有用。特别是:

  • 即使您只有一个生产实现,您也可能在 tests 中有其他实现,无论是成熟的假货还是动态创建的模拟
  • 在很多情况下,依赖于具体类,它更依赖于依赖关系。例如,由于各种原因,具体类可能会暴露您依赖的其他公共成员。

请注意,这是一个错误的陈述:

  

在依赖注入中,我们针对抽象进行编程。

您可以非常轻松地使用依赖注入和具体类。没有什么可说的为依赖项创建接口。依赖注入更多地是关于类获取其依赖关系的方式,而不是它用于表达它们的抽象级别。

基本上是这样的:

  • 即使您只有一个生产实施,也不要低估“测试双打”实施抽象的重要性
  • 如果你真的想要,不要害怕依赖于具体的实现,但注入依赖性仍然比在你的类中创建它更清晰,它真的是一个“适当的”依赖
  • 不要尝试注入所有内容 - 如果依赖项的行为实际上不是交互,那么您可能不想注入它。例如,不要只是为了避免创建List<T>的实例而开始注入“集合提供程序” - 例如,出于测试目的,您不需要将类与List<T>的行为隔离开来。 / LI>