你有沒(méi)有聽過(guò)四維架構(gòu)拟蜻?

你有沒(méi)有聽過(guò)四維架構(gòu)搔扁?

在程序員界流傳著很多傳說(shuō)涂炎,這些傳說(shuō)由于歷史太過(guò)久遠(yuǎn)垫竞,漸漸被人們遺忘重贺,只剩下一些流行的名詞,比如架構(gòu)銀彈针余,程序員三大愛好重構(gòu)驱负,人月設(shè)計(jì)模式等等宇挫。今天我們就來(lái)講講架構(gòu)橡疼,而且不是普通的架構(gòu)历帚,是一個(gè)可能你聽都沒(méi)聽說(shuō)過(guò)的四維架構(gòu)。

架構(gòu)是什么

行業(yè)里并沒(méi)有一個(gè)明確標(biāo)準(zhǔn)的關(guān)于架構(gòu)的定義,有些人按照系統(tǒng)的組成結(jié)構(gòu)來(lái)定義架構(gòu),有些人根據(jù)系統(tǒng)設(shè)計(jì)遵循的決策來(lái)定義架構(gòu)灰追。這里我們采用關(guān)于 rest 那個(gè)著名的論文里的定義:架構(gòu)是系統(tǒng)運(yùn)行時(shí)的高層抽象

架構(gòu)存在的理由

  • 交流的需要

人類使用語(yǔ)言來(lái)交流的只能是概念和抽象堵幽,我們實(shí)際上無(wú)法使用語(yǔ)言傳達(dá)一個(gè)真實(shí)存在的事物狗超,所以你跟一個(gè)沒(méi)有桌子這個(gè)概念的人是無(wú)法交流桌子的,而你要傳達(dá)桌子這個(gè)概念時(shí)朴下,也只能使用柱子努咐,平面等等這些概念。

所以當(dāng)我們?cè)谟懻撘粋€(gè)系統(tǒng)時(shí)殴胧,通常討論的是概念模型或抽象渗稍。如果討論的是一些類型系統(tǒng)時(shí),比如分布式团滥,大數(shù)據(jù)處理竿屹,我們通常會(huì)使用概念模型,比如分布式事務(wù)惫撰,兩階段提交就是兩個(gè)概念模型羔沙。當(dāng)我們?cè)谟懻撘粋€(gè)具體的系統(tǒng)時(shí),我們通常使用的是抽象厨钻。網(wǎng)上搜到某某系統(tǒng)的架構(gòu)圖扼雏,其實(shí)就是系統(tǒng)的高層抽象,所以至少為了交流夯膀,我們也需要架構(gòu)诗充。

  • 設(shè)計(jì)的需要

我們最終的目標(biāo)是要實(shí)現(xiàn)一個(gè)存在指定功能集并且實(shí)際可運(yùn)行的系統(tǒng)。為了達(dá)到這個(gè)目標(biāo)诱建,我們通常會(huì)有兩種方式蝴蜓。拿畫畫來(lái)做比喻,你即可以直接開始畫俺猿,也可以先構(gòu)圖茎匠。基本上來(lái)說(shuō)押袍,如果你胸有成竹了诵冒,那就可以直接上,如果沒(méi)有谊惭,那還是先做設(shè)計(jì)比較好( TDD 倡導(dǎo)的簡(jiǎn)單設(shè)計(jì)汽馋,也是設(shè)計(jì)的一種)。

假設(shè)我們選擇了先進(jìn)行設(shè)計(jì)(這個(gè)也是大部分非個(gè)人項(xiàng)目的實(shí)際選擇)圈盔,那么我們進(jìn)行的就是架構(gòu)設(shè)計(jì)豹芯。所以要有架構(gòu)這個(gè)概念的存在,才能做架構(gòu)設(shè)計(jì)驱敲。

  • 決策的需要

無(wú)論是上層設(shè)計(jì)時(shí)铁蹈,還是具體開發(fā)過(guò)程中,我們常常需要面對(duì)一些選擇众眨,比如通訊方式選擇那一種木缝,又比如執(zhí)行方式應(yīng)該是同步還是異步便锨,又或者應(yīng)該返回空還是拋出異常。當(dāng)我們面對(duì)多種選擇時(shí)我碟,需要一個(gè)準(zhǔn)則來(lái)指導(dǎo)我們做出正確(至少是一致)的選擇放案。而這個(gè)準(zhǔn)則就來(lái)自于架構(gòu)。

架構(gòu)設(shè)計(jì)的原則

《大道至易》里說(shuō)架構(gòu)設(shè)計(jì)通常是帶有架構(gòu)意圖的矫俺,而架構(gòu)意圖則是架構(gòu)師分析完一個(gè)系統(tǒng)之后產(chǎn)生的吱殉。面對(duì)不同的系統(tǒng),產(chǎn)生的架構(gòu)意圖也會(huì)不同厘托,當(dāng)然設(shè)計(jì)的架構(gòu)也不同友雳。然而我們依然可以總結(jié)出一組較為通用的原則來(lái)設(shè)計(jì)架構(gòu),就像程序設(shè)計(jì)領(lǐng)域的 solid 原則一樣铅匹。 Stephen Mellor 在《架構(gòu)之美》里討論了7個(gè)架構(gòu)原則押赊。

  1. 概念完整性
  2. 功能多樣性
  3. 增長(zhǎng)適應(yīng)性
  4. 修改獨(dú)立性
  5. 熵增抵抗性
  6. 可構(gòu)架性
  7. 自動(dòng)傳播

架構(gòu)設(shè)計(jì)的方法

Roy Thomas Fielding 在他的博士論文里介紹了兩個(gè)架構(gòu)設(shè)計(jì)的方法。

  1. 根據(jù)已存在的一組架構(gòu)風(fēng)格做為基礎(chǔ)進(jìn)行修改調(diào)整包斑。以得到滿足目標(biāo)架構(gòu)約束的一種架構(gòu)風(fēng)格(也可以是具體的架構(gòu))
  2. 分析目標(biāo)架構(gòu)的各種約束條件流礁,根據(jù)約束條件選擇模式,通過(guò)模式組合形成一種滿足所有(或者大部分)約束條件的目標(biāo)架構(gòu)罗丰。(具體模式和約束條件的對(duì)應(yīng)關(guān)系神帅,以及論證可以參見論文)

另外還有 RUP 的 4+1 的視圖方法∶鹊郑或者《軟件架構(gòu)設(shè)計(jì)》上說(shuō)的五視圖方法找御。都有討論架構(gòu)設(shè)計(jì)的方法,感興趣的可以找相應(yīng)的書籍來(lái)看绍填。

四維又是什么

上面說(shuō)了這么多關(guān)于架構(gòu)的東西霎桅,那么四維又是什么呢?四維其實(shí)就是比三維多一維(時(shí)間緯度)讨永。所謂四維架構(gòu)就是隨著時(shí)間會(huì)成長(zhǎng)的構(gòu)架滔驶。

這個(gè)世界上唯一不變的就是變化,架構(gòu)會(huì)隨著時(shí)間變化不是一句廢話嘛住闯。其實(shí)不然,變化不等于成長(zhǎng)澳淑。不同的架構(gòu)熵增抵抗性是不同的比原,大部分架構(gòu)隨著時(shí)間流逝,以不同的速度腐爛老去杠巡,最后死亡量窘。另外一些好的架構(gòu),則隨著時(shí)間不停的變化以適應(yīng)新的情況氢拥。

是不是這些好的架構(gòu)就是我想說(shuō)的四維架構(gòu)呢蚌铜?雖然也可以說(shuō)這些好的構(gòu)架確實(shí)是隨著時(shí)間“成長(zhǎng)”的架構(gòu)锨侯。但是通常這種“成長(zhǎng)”是隨機(jī)的,不可測(cè)的冬殃。其結(jié)果就是雖然一年后這個(gè)系統(tǒng)還是一個(gè)運(yùn)行良好并且擁有良好架構(gòu)的系統(tǒng)囚痴,但這個(gè)架構(gòu)一定跟一年前很不一樣了,甚至不太認(rèn)得出來(lái)了审葬。

一條小狗長(zhǎng)大后深滚,不可能變成一只貓,所以四維架構(gòu)就是一個(gè)架構(gòu)在成型的那一刻就確定了它永遠(yuǎn)的樣子涣觉。通俗點(diǎn)說(shuō)就是四維架構(gòu)是擁有基因的架構(gòu)痴荐。那么怎么設(shè)計(jì)一個(gè)擁有基因的架構(gòu)呢?

最后說(shuō)兩句

感覺這篇文章被我寫爛了官册,后面實(shí)在編不下去了生兆。但是我又不想去掉四維,把它變成一篇單純寫架構(gòu)的文章膝宁,因?yàn)槲覍懰哪康木褪菫榱藢?code>四維鸦难,可能這個(gè)概念在我腦中還沒(méi)完全成型吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末昆汹,一起剝皮案震驚了整個(gè)濱河市明刷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌满粗,老刑警劉巖辈末,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異映皆,居然都是意外死亡挤聘,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門捅彻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)组去,“玉大人,你說(shuō)我怎么就攤上這事步淹〈勇。” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵缭裆,是天一觀的道長(zhǎng)键闺。 經(jīng)常有香客問(wèn)我,道長(zhǎng)澈驼,這世上最難降的妖魔是什么辛燥? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上挎塌,老公的妹妹穿的比我還像新娘徘六。我一直安慰自己,他們只是感情好榴都,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布待锈。 她就那樣靜靜地躺著,像睡著了一般缭贡。 火紅的嫁衣襯著肌膚如雪炉擅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天阳惹,我揣著相機(jī)與錄音谍失,去河邊找鬼。 笑死莹汤,一個(gè)胖子當(dāng)著我的面吹牛快鱼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纲岭,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抹竹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了止潮?” 一聲冷哼從身側(cè)響起窃判,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎喇闸,沒(méi)想到半個(gè)月后袄琳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡燃乍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年唆樊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刻蟹。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逗旁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舆瘪,到底是詐尸還是另有隱情片效,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布英古,位于F島的核電站淀衣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏哺呜。R本人自食惡果不足惜舌缤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望某残。 院中可真熱鬧国撵,春花似錦、人聲如沸玻墅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)澳厢。三九已至环础,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剩拢,已是汗流浹背线得。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留徐伐,地道東北人贯钩。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像办素,于是被迫代替她去往敵國(guó)和親角雷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容