“组件化”与“依赖注入”

 

“组件化” 是编程的最高目标,因为“组件化”意味着“高内聚、低耦合”和“可替换”,这样软件的规模才能越做越大,使软件具有达到最高的灵活性,并适应激烈竞争下企业业务的变化,同时保持较低的维护成本。

 

我们会不禁地问,“组件化”是究竟是在什么样的Context中出现的?这个是个非常有趣的问题。

 

“组件”的宿敌就是“依赖”,可以说,“组件化”的过程就是一个“不断减少模块间依赖”的过程(这需要有一定的“策略”,下面会讨论),注意不是消灭“依赖”,而是在避免“高度依赖”而产生什么不利因素或危害。

 

举例子来说吧,我们平时使用的台式电脑,就是高度“组件化”的产物,而我原来的笔记本电脑是Thinkpad T61Lenovo出于某种原因考虑(性能?成本?技术限制?),竟把“独立显卡”像“集显”一样“集成”在“主板”上,这样一来“显卡”和“主板”的“依赖度”就很高(高耦合)。不利因素,显而易见,当“显卡”坏的话,“显卡”和“主板”模块需要同时更换,“维护成本”也相应地高很多。这个是“高依赖”(高耦合)带来实实在在的问题。可以想象,如果软件模块中也存在这样的“高依赖”,在维护成本同样会上升许多。

 

为了解决“高依赖”的问题,就有高人提出了“注入”概念。再看回上面说到的例子,之所以说

T61的“主板”“高依赖”于“显卡”,是因为“主板”需要“知道”太多关于“显卡”的信息了,它知道的信息不仅仅是“显卡”的“通用功能”,而且知道该“显卡”很多“特有功能”(这样当然有利于从硬件级别提升性能的),换句话说,就是该“主板”也是“专为”该“显卡”而造的。

 

另一个例子,我们台式机的“显卡”是可以按“一定规则”更换的,不同牌子、不同技术都可以,这样“主板”对“显卡”的“依赖”就小很多了,这时“显卡”和“主板”都是独立的“组件”。

 

这时我们可以探究一下这个例子,“依赖”被如何处理的。显然,台式机的“主板”,压根就不关心(不知道)“显卡”是哪个品牌,哪种型号,它需要的是一块“显卡”,换句话说“主板”依赖于“显卡”,只要“插入”合适的“显卡”就可以,“显卡”也可以替换,这里其实就是形象的“依赖注入”-- 通过“注入”来,处理依赖关系,而不是在“主板”上建立与“显卡”的“高依赖”关系。这样做的好处也是显而易见的!

 

目前在编程开发中,“注入”的实现可以有多种,例如:Service LocatorAbstract factoryFactory methodFrameworkSpring)等。

 

        “维基”上,有个很好,说明的例子,摘录代码如下:

 

  • 该例子是“车”对“引擎”的“依赖”,它们定义如下:

 

  • 高耦合的依赖

 

  • 手工注入依赖(通过“Factory Method”)

 

  • 通过IOC容器(Framework)来注入

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值