軟件雜談(1)- 解耦


-前言-

軟件雜談是大叔打算寫的關于軟件的隨筆系列,多數(shù)是在開車行路中冒出的想法凝危,又怕年紀大了忘卻岁疼,便記下來阔涉。

有些人天生就喜歡寫作或記錄生活,這當然是個很好的習慣捷绒,而我卻不太擅長瑰排。在我看來,靜下心寫一些東西是很奢侈的事情暖侨,每天奔波椭住,很少能給自己擠出一點時間。

最近流行一句話:“貧窮限制了你的想象力”字逗。忙碌又何嘗不是京郑?忙碌更像是鴉片,會使人習慣甚至麻木葫掉。你看些举,這世界上是不是中國人最勤勞忙碌,也恰巧是中國人最缺乏想象力俭厚,忙得沒時間思考户魏,沒時間想象。

大叔很忙挪挤,可還有那么一個私密時間屬于我獨有叼丑,那便是開車的時候,安靜且沒人打擾扛门。

這還要“感謝”我大西安的交通擁堵鸠信,別人抱怨,我卻很享受尖飞。每天至少在車里度過兩個小時症副,除了思考,還能做些什么政基?

當然贞铣,這種享受要對老司機來說才是這樣,因為只有老司機才能騰出大腦沮明,邊開車邊思考辕坝。

大叔搞軟件技術20多年,駕齡15年荐健,當然是老司機了(相信你沒有想歪)酱畅。

言歸正傳琳袄,既是雜談,便無有順序可言纺酸,想到哪里聊到哪里窖逗。也無有題材限制,只要跟軟件技術相關餐蔬,都可以聊碎紊。

這一篇我們先聊一個詞--“解耦”。

選解耦為關雎樊诺,還是有原因的仗考,因為在大叔眼里,解耦太重要了词爬。

重要到什么程度秃嗜?基本上只要掌握好解耦,軟件開發(fā)內功的任督二脈就基本打通了顿膨。

-概念-


解耦這個詞譯自英文decouple锅锨,翻譯的非常好。

從詞義上看:

解者虽惭,拆也橡类,分也,離也芽唇,斷也顾画。

偶者,索也匆笤,合也研侣,并也,緣也炮捧。

解耦庶诡,顧名思義就是降低軟件體之間的耦合度,直至徹底斷耦的過程咆课。

我們這里所說的軟件體末誓,是指具有相對獨立性的軟件功能集合∈轵剑可以理解為某個函數(shù)體或者模塊喇澡,或更多的指可重用的服務和組件。

那么什么是耦合與耦合度呢殊校?

所謂耦合晴玖,是指兩個或多個軟件體之間的依賴關系。耦合度就是這種相互依賴關系的強弱程度。

耦合度越高呕屎,軟件體之間的牽連羈絆就越多让簿,依賴性就越大,反之則反秀睛。

例如尔当,一個組件,依賴于另一個組件才能夠運行琅催,那么就說這兩個組件之間存在耦合居凶。倘若一個組件依賴于它運行的環(huán)境才能夠運行,那么就說這個組件跟環(huán)境之間存在耦合藤抡。

-思想由來-


解耦不是某種語言或者技術特有的概念,解耦是一種普遍存在的思想抹估。

解耦的思想由來已久缠黍,早在軟件可重用技術提出之前,硬件集成電路(IC)技術就普遍采取了解耦的技術药蜻。道理很簡單瓷式,每一個集成電路模塊在設計上必須具備獨立性,標準性和解耦性语泽,才能夠像搭積木一樣構建出復雜的系統(tǒng)贸典。

伴隨著軟件可重用思想及相關技術的產生,接口和解耦的概念也應運而生踱卵。軟件組件以及基于組件的開發(fā)(Component Based Development - CBD)要求組件能夠像集成電路一樣獨立存在廊驼,通過事件松散耦合。由此發(fā)展出的一系列組件模型惋砂,都是解耦思想的完美實例妒挎。例如Enterprise JavaBeans (EJB)模型,Component Object Model (COM)模型西饵,.NET模型等等酝掩。

在面向服務的架構(Service Orientation Architectures - SOA)中,也需要軟件服務相互獨立眷柔,沒有耦合期虾。

還有這些年流行的微服務,前后端分離驯嘱,也是這樣镶苞。

云計算以及云平臺,也處處體現(xiàn)著解耦思想宙拉。例如宾尚,基礎設施即服務 (IaaS)、平臺即服務 (PaaS) 和軟件即服務 (SaaS)等技術中都體現(xiàn)著熱插拔,松耦合煌贴,資源動態(tài)分配整合的特點御板。

-耦合的影響-


軟件體之間存在耦合,會增加軟件實現(xiàn)的復雜度牛郑。

耦合像一種無形的力量怠肋,束縛著軟件結構的健康。不經思考的隨意耦合淹朋,可能造成內部邏輯混亂笙各,難以糾正,有如三千煩惱絲础芍,剪不斷理還亂杈抢。

高耦合度的軟件系統(tǒng),閱讀起來一定困難仑性,維護成本一定提高惶楼,復雜度隨之也高,也會導致質量的下降诊杆。

佛教思想中有十二因緣的理論歼捐,講述由無明引起的環(huán)環(huán)相扣、因果相隨的輪轉生死過程晨汹。串接苦趣每一環(huán)節(jié)的是緣豹储,要想獲得自由、脫離生死淘这,就要認識緣斷了緣剥扣。

類似的,耦合的本質也是緣慨灭。而正是這種牽絆朦乏,造成系統(tǒng)復雜乃至生出種種問題和痛苦。

-解耦的本質-


既然耦合的本質是緣氧骤,那么解耦的本質就是斷緣呻疹,并通過斷緣提升軟件體的自由。

沒錯筹陵,是自由刽锤!

自由會帶來活力,自由會引發(fā)包容開放朦佩,自由會促進事物健康發(fā)展并思。

沒想到這個充滿人文思想的因素,在軟件系統(tǒng)中也是這樣语稠。

一個國家缺少自由宋彼,必然會走向滅亡弄砍。一個軟件系統(tǒng)缺少自由,必然會問題百出并導致失敗输涕。

原諒我這一生不羈放縱愛自由音婶,大叔之所以把解耦放到第一篇來講,也有這個原因莱坎,解耦太重要了衣式,自由太重要了

-解耦的方法-


實際上,軟件體之間不可能沒有聯(lián)系,否則我們靠什么把它們串接起來鄙陡。

我們要拆解的不是依賴關系,而是要打破對某個具體實相的依賴住册,也就是對某個具體的軟件體的真實性的依賴。這句話不拗口吧烫葬?

怎么打破界弧?答案就是抽象和接口。

通過抽象和接口搭综,依賴關系的實體消亡,軟件體除了自身表現(xiàn)出內斂性外划栓,一切對外的認知都建立在抽象和接口之上兑巾。

不著相,保持自性清凈忠荞,是通達精神自由的方法蒋歌。在解耦層面,亦復如是委煤。

當軟件體之間徹底斷耦堂油,它們中的每一部分就處于獨立存在的狀態(tài)。我們甚至可以把其中的任何一個替換掉碧绞,而不會影響整體正常工作府框。對整個系統(tǒng)而言,也帶來了更大的自由度讥邻。

我們時常聽到的依賴倒置迫靖,控制反轉,依賴注入兴使,面向接口編程這些概念系宜,都是在抽象和接口依賴的關系上建立和實現(xiàn)的。

其實你可能每天都在接觸解耦发魄,只是自己也要用好解耦而已盹牧。

-解耦的人文精神-


一個耦合度小的軟件設計和實現(xiàn),無論從結構上還是細節(jié)上都會帶給人賞心悅目的感覺。這種由內向外透出的美感汰寓,很大程度上就源于解耦后的軟件體所具有的獨立性和自由性口柳。

而獨立性和自由性,正是現(xiàn)代文明中的人類追求的精神價值和目標踩寇。

正如陳寅恪先生題寫在《清華大學王觀堂先生紀念碑銘》中的十個大字:“獨立之精神 自由之思想”啄清,時刻提醒著我們要在求知的道路上樹立獨立自由的精神。

作為軟件工作者俺孙,想寫出好的軟件辣卒,也需要力求把這種獨立自由的人文精神賦予在軟件作品當中。

不自由睛榄,毋寧死荣茫。此時,解耦就顯得尤為重要场靴。

希望大家能夠理解并應用好解耦啡莉,寫出層次清晰,結構靈活旨剥,質量可靠咧欣,優(yōu)美的軟件。


-2018.03.31 蘭山 -




最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末轨帜,一起剝皮案震驚了整個濱河市魄咕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚌父,老刑警劉巖哮兰,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異苟弛,居然都是意外死亡喝滞,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門膏秫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來右遭,“玉大人,你說我怎么就攤上這事荔睹±暄荩” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵僻他,是天一觀的道長宵距。 經常有香客問我,道長吨拗,這世上最難降的妖魔是什么满哪? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任婿斥,我火速辦了婚禮,結果婚禮上哨鸭,老公的妹妹穿的比我還像新娘民宿。我一直安慰自己,他們只是感情好像鸡,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布活鹰。 她就那樣靜靜地躺著,像睡著了一般只估。 火紅的嫁衣襯著肌膚如雪志群。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天蛔钙,我揣著相機與錄音锌云,去河邊找鬼。 笑死吁脱,一個胖子當著我的面吹牛桑涎,可吹牛的內容都是我干的。 我是一名探鬼主播兼贡,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼攻冷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了遍希?” 一聲冷哼從身側響起讲衫,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎孵班,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體招驴,經...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡篙程,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了别厘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虱饿。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖触趴,靈堂內的尸體忽然破棺而出氮发,到底是詐尸還是另有隱情,我是刑警寧澤冗懦,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布爽冕,位于F島的核電站,受9級特大地震影響披蕉,放射性物質發(fā)生泄漏颈畸。R本人自食惡果不足惜乌奇,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望眯娱。 院中可真熱鬧礁苗,春花似錦、人聲如沸徙缴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽于样。三九已至疏叨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間百宇,已是汗流浹背考廉。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留携御,地道東北人昌粤。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像啄刹,于是被迫代替她去往敵國和親涮坐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內容