逼真的为什么我会使用鸭子打字或控制反转?

Cod*_*ome 2 c++ java inversion-of-control

我刚刚开始学习鸭子打字和控制反转.

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

mjv*_*mjv 6

即使您没有像评论中暗示的那样"为其他开发人员开发代码",编码到接口也有很多好处.讨论这些好处是值得的,但是由于问题要求现实世界的例子/用例,这里有:

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

请注意我是如何尝试并仅提供具有非常明确用例的示例.请注意,使用IoC和相关概念还有很多其他原因(例如,为了帮助生成模块化设计,提高可读性......)但是这样的原因/优点更加微妙,不那么客观,但也可能只是如此重要!