什么是軟件解耦
簡單的講
解耦就是我不需要知道你是誰陕截,你也不需要知道我是誰。
就像10086一樣农曲,我們不需要知道每次是哪位客服MM接聽,而客服MM也不需要知道她服務的對象是誰形葬。
軟件中舉個例子就是暮的,經(jīng)常需要對業(yè)務報文進行處理,處理完了如果需要發(fā)送冻辩,我們只需要調(diào)用發(fā)送接口,而這個接口是通過空口恨闪、電口、光口將報文發(fā)送出去老玛,我們根本不CARE钧敞。而空口、電口溉苛、光口也不會CARE他們發(fā)送的是什么東西。
為什么要軟件解耦
軟件解耦的本質(zhì)是提高各模塊的內(nèi)聚性桨吊,降低模塊間的耦合性凤巨,以應對極其復雜的需求變化视乐。
比如某產(chǎn)品針對市場需求需要馬上推出個MINI版敢茁,需要裁剪掉基礎版本的一些高級功能特性,在裁剪中發(fā)現(xiàn)直接將高級功能裁掉伸刃,程序根本不能運行,然后投入大量的人力分析捧颅、開發(fā)完成這個MINI版本。如果解耦設計的比較好的話挚币,這方面投入的人力趨近于0扣典。
常用軟件解耦方式
依賴倒置(Dependence Inversion Principle)
高層模塊不應該直接依賴底層模塊,他們都應該依賴于抽象贮尖。抽象不應該依賴于細節(jié),細節(jié)應該依賴抽象湿硝。
《資本論》中都曾闡釋依賴倒轉(zhuǎn)原則——在商品經(jīng)濟的萌芽時期,出現(xiàn)了物物交換序六。假設你要買一IPhone蚤吹,賣IPhone的老板讓你拿一頭豬跟他換随抠,可是你并沒有養(yǎng)豬,你只會編程拱她。所以你找到一位養(yǎng)豬戶,說給他做一個養(yǎng)豬的APP來換他一頭豬桶雀,他說換豬可以唬复,但是得用一條金項鏈來換——所以這里就出現(xiàn)了一連串的對象依賴,從而造成了嚴重的耦合災難敞咧。解決這個問題的最好的辦法就是,買賣雙發(fā)都依賴于抽象——也就是貨幣——來進行交換乍恐,這樣一來耦合度就大為降低了
簡單的說就是评疗,當有依賴關系是茵烈,盡量依賴抽象的接口而不是具體細節(jié)實現(xiàn)。而對外提供功能是也提供抽象的接口加匈,而不是直接暴露內(nèi)部實現(xiàn)宙彪。
控制反轉(zhuǎn)(Inversion of Control)
當我們使用開發(fā)框架時,開發(fā)框架就是作為服務方释漆,而我們自己編寫的業(yè)務應用就是客戶方。當Client調(diào)用server時示姿,這個叫做一般的控制逊笆;而當server調(diào)用Client時,就是我們所說的控制反轉(zhuǎn)难裆,同時我們也將這個調(diào)用稱為“回調(diào)”」犹担控制反轉(zhuǎn)跟依賴倒置都是一種編程思想症虑,依賴倒置著眼于調(diào)用的形式,而控制反轉(zhuǎn)則著眼于程序流程的控制權谍憔。
比如你去下館子,你是Client餐館是server逛球。你點菜沈条,餐館負責做菜需忿,程序流程的控制權屬于server;而如果你去自助餐廳涕烧,程序流程的控制權就轉(zhuǎn)到Client了汗洒,也就是控制反轉(zhuǎn)。
總結
解耦溢谤,即面向接口、抽象進行編程阀参,降低模塊間的耦合性瞻坝。
參考資料,如有侵權所刀,請聯(lián)系我刪除,多謝忧吟!