1

为什么我要在一个几乎没有机会被其他人重用或升级的站点上实现接口和依赖注入?

4

6 回答 6

5

它通常使单元测试变得相当简单。例如,您可能有一个类型使用连接到数据库的另一种类型。对于第一种类型的单元测试,您可以注入一个测试模拟来代替第二种类型,从而允许您有效地对第一种类型进行单元测试,而无需通过第二种类型间接连接到数据库。

于 2009-03-05T18:09:17.163 回答
5

当你学会如何为计算机编程时,你正在开发一种你的手艺的“肌肉记忆”。多年来,您继续以同样的心态进行编程。大多数人并没有从一开始就学习所有漂亮的 OOP 原则,所以他们看起来比他们学习的方式更努力。

每当您使用 OOP 语言时,您都应该养成使用 OOP 设计技术的习惯,因为这将使您成为一个整体上更好的开发人员。您的目标应该是重新训练您的编程肌肉记忆以使用这些技术。那么你就不必问这些问题并假设这些技术在某种程度上“妨碍”了你的编程。你变成了一个程序员,只是这样编程。

于 2009-03-05T18:13:38.837 回答
2

为什么,确实?

我不认为接口和注入只是关于重用或升级。

就个人而言,我对所有项目都使用接口和 DI。避免它们成为一种好处是不够的开销。

于 2009-03-05T18:08:42.640 回答
2

因为您所做的假设与导致 Y2K 的假设相同。

于 2009-03-05T18:08:50.377 回答
1

我发现它使以我还没有想到的方式重用我的代码变得更加容易。它还可以更轻松地更改代码的工作方式,而无需更改源代码。

我正在使用Spring.NET进行依赖注入。

假设您有一个具有 DoWork() 函数的 Machine 类。然后创建一个 IWorkAlgorithm 接口,为每台机器提供特定的算法实现。

Machine 的每个实例都注入了一个 IWorkAlgorithm,Machine.DoWork() 调用注入的实现。

现在您有以下优势:

  1. 您只需编辑 XML 文件就可以换入新的实现。
  2. 您可以通过编辑 XML 文件来更改每个实现的属性(超时、限制等)。
  3. 您可以在 Machine 类之外重用您的实现。
于 2009-03-05T18:26:20.727 回答
1

如果您正在做面向对象的编程,即使您是唯一会查看代码的开发人员,您仍然应该进行单元测试,如果您不使用依赖注入,这将变得复杂。

不要忘记,您软件的“其他开发人员”很可能就是您。您可以将大量高度耦合、相互依赖的代码拼凑在一起,这些代码可以工作,甚至可以在您处理它的同时理解它,但是当您离开项目的那一刻,即使是几天,您也会开始忘记所有阻止毛线球散开的小事。

当你回到它时(我还没有看到一个不需要在路上做一些改变的软件),你会希望你已经遵循了所有的最佳实践。

于 2009-03-05T18:39:42.427 回答