实际上,我为什么要使用duck-typing或反转控制

Realisticly why would I use duck-typing or inversion of control?

本文关键字:duck-typing 控制 为什么 实际上      更新时间:2023-10-16

我刚刚开始学习Duck-typing和Control反转。

在实际的现实世界的例子中,为什么我要将这些概念合并到我的代码中呢?

为接口编写代码有很多好处,即使您不像您在评论中暗示的那样"为其他开发人员开发代码"。讨论这些好处是一个有价值的练习,但是由于这个问题要求的是真实世界的例子/用例,下面是:

  • 进行测试。,IoC可以很容易地引入模拟和其他简化的/测试类,这些类允许测试特定的单元,而不必引入项目的所有依赖项。
  • 用于在某些依赖项可用之前实现应用程序的特定部分。(类似于测试用例)
  • 为不同的用户提供不同的功能集。您可以拥有给定模块的多个"版本",并将相应的模块交付给不同类型的客户:评估版、标准版、高级版甚至Beta测试版。只要尊重模块的API,应用程序的其余部分就可以相同地工作,而不必担心所使用模块的特定性质。
  • 使用特定框架。这个例子可能被认为是一个循环引用:"为什么这些框架首先使用IoC ?",但事实是IoC模式在几个库和框架中无处不在,它们本身非常有用。
  • 创建拦截器。虽然拦截器是一个有用的调试设备,但它们也可以用于许多目的。

请注意我是如何尝试只提供带有非常清晰的用例的示例的。请注意,使用IoC和相关概念还有许多其他原因(例如,帮助生成模块化设计,提高可读性……),但这些原因/优势更微妙,更不客观,但同样重要!

根据我的理解,依赖注入是一种通过控制反转实现的设计模式,它更接近于软件设计的原则。

依赖注入的一个例子是将Car和Engine分离为两个独立的类。这辆车需要一个引擎才能运转,任何引擎都能运转。然后引擎被依赖注入到汽车中。

IoC/Dependency的一个好处是清楚地分离了类和它们的用途。一个类可以被另一个类替换,而不会使代码中断。依赖注入可以在运行时完成,这样可以方便地重新配置软件。

最近的一次经历告诉我,使用IoC后生活变得多么容易。在最近的一次工作中,我不得不清理一个用户提交的html。在项目的许多地方使用相同的清洁服务。但是以前的regex cleaner在某些特殊情况下不起作用。我刚刚用JSoup库写了一个新的实现,并在需要的地方链接。使用Spring IoC切换变得如此简单:)

引用这篇关于IoC的文章:

使用面向对象的设计原则和特性,如接口、继承和多态性,IoC模式可以实现更好的软件设计,促进重用松散耦合易于测试软件组件。

(强调我的)

这些对我来说都是很好的理由。你还想要更多吗?

至于鸭子打字,在我看来,这个问题还没有定论。它在某些情况下有一些好处,但会导致更多的运行时错误可能性。

IoC基本上帮助您在开发时将实例化与代码解耦。因此,运行时对象可以被一些称为容器的外部代理注入(而不是由代码实例化它们)——只要它们遵守接口。程序到接口是设计模式书中的第一原则。优势是巨大的。在IoC中,它有助于解耦你的代码。

依赖注入和依赖拉是两种不同形式的IoC。

看看这个链接

一个侧面——在java世界中,Spring框架甚至允许引入新的方法。

对DuckTyping不确定