耦合,是程序员面对的最主要的编程问题之一。无数编程技术的诞生其目的就在于为程序解耦。好比面相对象中的多态,解决了对功能的需求与特定实现紧耦合的问题。MVC的框架模式解决了数据与视图紧耦合的问题。工厂设计模式解决了功能使用者与功能提供者紧耦合的问题。MQ解决了请求与答复紧耦合的问题。程序员
耦合本来是机械和电学领域的概念,用以形容多个组件或元件相互影响,相互配合,相互制约。好比传动轴与齿轮的耦合,放大电路和滤波电路的耦合。在工程领域,耦合是利器,是多组件,多模块,多系统之间相互协做的主要办法。耦合在软件领域却表现出了和工程领域不一样的特性,除了其带来的协做上的好处之外,耦合最主要的特性就是难以修改。工程领域不多对已存在的事物进行修改和重构,多以更新换代,产出新产品的方式迭代,因此耦合在工程领域不是问题。而软件,是思惟的直接产物,没有脱离于人的思惟之外的东西能够产出软件(至少目前如此),意思就是,你不能对着一个机器指手画脚就期望它能将你所须要的软件生产出来。因此经过相似工程领域那样每次都制造新产品的方式迭代软件,是不可行的。软件所以面临着在原有基础上不断修改和重构的情形。这时,耦合就变成了一大体命缺陷,它致使你的每一次修改都有牵一发而动全身的效果。而你在面对一个超出本身理解能力的复杂体时,并不能有效的控制这种连带的变化,解耦成为了软件领域的一大核心问题。编程