換個(gè)角度理解之銀彈

《換個(gè)角度理解之設(shè)計(jì)模式》的草稿已經(jīng)放了一個(gè)多月了,始終感覺缺少點(diǎn)什么。最近因?yàn)楣ぷ餍枰谧xShiro,Thymeleaf源碼,而在閱讀過(guò)程中時(shí)不時(shí)地會(huì)回想起還在做.NET的時(shí)候看過(guò)的 《程序員的自我修養(yǎng)—鏈接、裝載與庫(kù)》一書的這樣一句話——“軟件開發(fā)領(lǐng)域的銀彈——引入中間層”

說(shuō)句題外話,這本書當(dāng)初依然是聽取了很多人的推薦。但買回來(lái)之后才發(fā)現(xiàn)是講C艸的。得益于當(dāng)時(shí)的工資低但工作輕松,所以還是抽空看了一些。

1. 來(lái)源

下面這張圖是我剛剛專門從網(wǎng)上截取來(lái)的。

《程序員的自我修養(yǎng)—鏈接、裝載與庫(kù)》P8

2. 解讀

我還是從兩個(gè)核心概念出發(fā)嘗試闡述下對(duì)這句話的理解。

2.1 推遲作決定的時(shí)機(jī)

對(duì)上面這句話的理解最直接的當(dāng)然就是推遲作決定的時(shí)機(jī)。中間層的引入最明顯的就是再次將必須做出決定的時(shí)機(jī)后延。時(shí)機(jī)的后延也就意味著我們?yōu)閼?yīng)對(duì)變動(dòng)留出了更多的空間,系統(tǒng)也因此變得更加牢固。

但是請(qǐng)記住,這種方式并不是完美無(wú)瑕的。引入中間層的一大弊端就是增加了理解上的難度,這也是考驗(yàn)架構(gòu)師的一個(gè)重要指標(biāo)——哪些才是必要的中間層?

本人曾經(jīng)總結(jié)過(guò)這樣一句話: “真正做出決定的時(shí)間點(diǎn)和假裝做出決定的時(shí)間點(diǎn)之間的間隔越大,系統(tǒng)將越靈活,越牢固。大部分系統(tǒng)不穩(wěn)定性的重要原因之一正是作決定的時(shí)機(jī)太早,導(dǎo)致之后作決定時(shí)被之前作下的決定所束縛,進(jìn)而處處受制”。

2.2 知道自己不該知道什么

中間層引入之后,對(duì)于中間層之上的調(diào)用者而言,它就不應(yīng)該去關(guān)心中間層之下的相關(guān)細(xì)節(jié),它只需要遵守中間層的契約,來(lái)獲取自己想要的結(jié)果。

看了上面這段語(yǔ)言,是否感覺這個(gè)中間層的解釋很像接口。沒錯(cuò),接口就是中間層的一種形式。

所以在你引入了中間層之后,

  1. 當(dāng)你處在中間層之上時(shí),一定要謹(jǐn)記自己該知道的,以及不該知道的。尤其是后者,你作出的假設(shè)越少,系統(tǒng)的靈活性越大。
  2. 而當(dāng)你位于中間層之下時(shí),而是謹(jǐn)記不要去關(guān)注中間層之外的其他問(wèn)題。這也符合很多前輩所教育我們的“不要對(duì)軟件的其它部分做出任何假設(shè)”,"編寫羞澀的代碼"。

3. 總結(jié)

雖然是做.NET的時(shí)候就看到了這個(gè)言論,但真正有所感悟的則是在轉(zhuǎn)入Java,看了這么多的源碼之后。

回頭想想曾經(jīng)看過(guò)的那些優(yōu)秀源碼,對(duì)于它們?cè)O(shè)計(jì)中的精密之處,彼此之間似乎越來(lái)越像了!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,063評(píng)論 25 709
  • 干貨分享:用運(yùn)營(yíng)思維樹立個(gè)人品牌 第一彈 不用800萬(wàn)的學(xué)區(qū)房,不用環(huán)游世界的毒雞湯,每個(gè)人都可以成為人生贏家。大...
    張老師Jess閱讀 630評(píng)論 15 7
  • 一根魚線掏空我心一顆顆將我穿引最后打一個(gè)結(jié)鎖住我心 原以為哪一個(gè)人愛不釋手便是我的主人才明了我不過(guò)一串佛物敬仰之又...
    靜止空間閱讀 164評(píng)論 0 2
  • 坐在回家的637路公交車上,我開始感到疲倦。 今天不是周末,不是周一,只是在這之間的,某個(gè)普通的日子。 早上離開家...
    陸不換閱讀 1,049評(píng)論 1 2
  • 今天下午,瀏覽了幾所同類高校的科研網(wǎng),頗有收獲。我們?cè)趯?duì)外宣傳這部分,做得不夠。 一、網(wǎng)頁(yè)要分類清晰,亮點(diǎn)突出有的...
    容玲閱讀 233評(píng)論 0 1

友情鏈接更多精彩內(nèi)容