简单理解 控制反转IOC与依赖注入DI 的原理

1、应用背景:

打开机械手表的后盖,齿轮组中各个齿轮互相啮合在一起,一个齿轮的运作会对其他的齿轮造成不同程度的影响。多个齿轮共同运作,带动指针完成旋转。

软件系统中不同对象的依赖关系(耦合关系)。就像不同的齿轮运作时相互影响一样。系统越复杂,耦合越复杂。

耦合度高带来的问题:

  • 不同模块的开发人员开发进度及工作分配相互牵制
  • 新加入的人员培训费用增加
  • 对团队整体素质要求较高
  • 维护投入的资金和人力较高
  • 可能导致代码泄露问题,安全性降低

2、解决办法:

引入IOC(Inversion of ControlInversion of Control)即控制反转理论,降低对象间的耦合度

3、什么是控制反转(IOC)

IOC 容器作为第三方,就像是汽车控制台控制四个轮子一样,四个轮子之间相互不影响,控制权归控制台,控制台成为整个汽车的核心,由控制台控制四个轮子运动。

4、为什么要叫控制反转

系统未引入IOC之前,A对象想用B对象时需要先创建B对象,主动权在系统

引入IOC后,由于AB对象无依赖关系,运行到需要B对象时,IOC会创建一个B对象注入到A对象需要的地方,系统只需被动等待接收对象B即可。

系统主动变为被动,控制权颠倒过来了,这就是“控制反转”这个名称的由来。

助于理解,举个例子:

小孩想下床,没有保姆的时候需要自己主动找到鞋子并穿好,然后下床。

有保姆的时候,当小孩想下床的时候,保姆会给小孩找来鞋子,小孩只需要被动等待保姆拿来鞋子并穿上,就可以下床。

5、IOC的别名:依赖注入(DI)

6、IOC带来的好处:

  • 不同模块开发人员对系统的开发和测试独立,利于分配工作和新员工上手,开发效率、产品质量和安全性提高
  • 维护难度降低,调试程序和诊断故障
  • 更换子类简单快速,复用性好
  • 结构清晰,一目了然

7、 使用IOC框架应该注意什么


第一、引入了一个全新的框架,就会增加团队成员学习和认识的培训成本,并且在以后的运行维护中,还得让新加入者具备同样的知识体系。
第二、由于IOC容器生成对象是通过反射方式,在运行效率上有一定的损耗。如果你要追求运行效率的话,就必须对此进行权衡。
第三、具体到IOC框架产品(比如:Spring)来讲,需要进行大量的配制工作,比较繁琐,对于一些小的项目而言,客观上也可能加大一些工作成本。
第四、IOC框架产品本身的成熟度需要进行评估,如果引入一个不成熟的IOC框架产品,那么会影响到整个项目,所以这也是一个隐性的风险。


8、结论:


一些工作量不大的项目或者产品,不太适合使用IOC框架产品。另外,如果团队成员的知识能力欠缺,对于IOC框架产品缺乏深入的理解,也不要贸然引入。最后,特别强调运行效率的项目或者产品,也不太适合引入IOC框架产品,象WEB2.0网站就是这种情况。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值