理解解耦的一种思路

大家肯定听说过程序要具有金字塔结构,也听说过IOC。问问大家,“解耦”这个词,更能让你联想到IOC,还是程序的金字塔。我觉得大多数人的答案应该是IOC,为什么IOC这个词和解耦的相关性更高呢?我猜测是大家在阅读文章的时候,特别是讲语言,讲编程思想的文章时,你大概率都会听到多态,面向接口编程,设计模式这些概念,以及它们在解耦方面的建树,而IOC使用到了开发语言的多态特性,也是面向接口编程的绝好案例。但是,大家思考过“为什么IOC能解耦”这个问题吗?在思考这个问题前,要先思考“什么是耦合”。耦合原本是机械和电学领域的概念,用以形容多个组件或元件相互影响,相互配合,相互制约。存在相关性的对象之间,就存在耦合。耦合并不是一个或有或无的指标,它是一个存在强弱之分的指标。编程领域所说的解耦,其实并不是说解除两个组件之间的相关性,而是降低两个组件之间的相关性。为什么IOC能解耦这个问题就可以换句话说,为什么IOC能降低两个组件的相关性?

当对象A在它的内部new了对象B时,A与B的相关性是编码时就确定下来的,如果A使用了IOC呢,A通过构造函数或set函数接收了B的实例,那么A与B的相关性是在A被创建的时候才确定下来的。IOC降低了A和B的相关性了吗?降低了,因为第一种情况下,如果你要通过调整B去调整A,那么你需要修改A,而第二种情况下,同样要通过调整B去调整A,你却不需要对A进行修改。这个解耦是通过什么实现的,是通过推迟对象A和对象B确定相关性的时间来实现的。当A已经开始运转的时候,不论B是A自己new的,还是IOC注入的,A和B此时的相关性都是相同的,但在A的生命周期内

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值