耦合,是程序員面對的最主要的編程問題之一。無數編程技術的誕生其目的就在於爲程序解耦。好比面相對象中的多態,解決了對功能的需求與特定實現緊耦合的問題。MVC的框架模式解決了數據與視圖緊耦合的問題。工廠設計模式解決了功能使用者與功能提供者緊耦合的問題。MQ解決了請求與答覆緊耦合的問題。程序員
耦合本來是機械和電學領域的概念,用以形容多個組件或元件相互影響,相互配合,相互制約。好比傳動軸與齒輪的耦合,放大電路和濾波電路的耦合。在工程領域,耦合是利器,是多組件,多模塊,多系統之間相互協做的主要辦法。耦合在軟件領域卻表現出了和工程領域不一樣的特性,除了其帶來的協做上的好處之外,耦合最主要的特性就是難以修改。工程領域不多對已存在的事物進行修改和重構,多以更新換代,產出新產品的方式迭代,因此耦合在工程領域不是問題。而軟件,是思惟的直接產物,沒有脫離於人的思惟之外的東西能夠產出軟件(至少目前如此),意思就是,你不能對着一個機器指手畫腳就期望它能將你所須要的軟件生產出來。因此經過相似工程領域那樣每次都製造新產品的方式迭代軟件,是不可行的。軟件所以面臨着在原有基礎上不斷修改和重構的情形。這時,耦合就變成了一大體命缺陷,它致使你的每一次修改都有牽一髮而動全身的效果。而你在面對一個超出本身理解能力的複雜體時,並不能有效的控制這種連帶的變化,解耦成爲了軟件領域的一大核心問題。編程