架構(gòu)漫談:若不讓你認(rèn)識(shí)什么是架構(gòu)? 我將退出編程界。
本文是漫談架構(gòu)的第一篇,作者將會(huì)通過(guò)類比的方式來(lái)介紹什么是架構(gòu)以及為什么會(huì)產(chǎn)生架構(gòu)。

一直以來(lái),在軟件行業(yè),對(duì)于什么是架構(gòu),都有很多的爭(zhēng)論,每個(gè)人都有自己的理解。甚至于很多架構(gòu)師一說(shuō)架構(gòu),就開(kāi)始談?wù)撌裁磻?yīng)用架構(gòu)、硬件架構(gòu)、數(shù)據(jù)架構(gòu)等等。我曾經(jīng)也到處尋找過(guò)架構(gòu)的定義,請(qǐng)教過(guò)很多人,結(jié)果發(fā)現(xiàn),沒(méi)有大家都認(rèn)可的定義。套用一句關(guān)于big data流行的笑話,放在架構(gòu)上也適用:
Architecture is like teenage sex,everybody talks about it,nobody really knows what is it。
事實(shí)上,架構(gòu)在軟件發(fā)明時(shí)的N多年以前,就已經(jīng)存在了,這個(gè)詞最早是跟隨著建筑出現(xiàn)的。所以,我覺(jué)得有必要從源頭開(kāi)始,把架構(gòu)這個(gè)概念先討論清楚,只有這樣,軟件行業(yè)架構(gòu)的討論才有意義。
什么是架構(gòu)?
架構(gòu)的英文是Architecture,在Wikipedia上,架構(gòu)是這樣定義的:
Architecture (Latin architectura, from the Greek ?ρχιτ?κτων arkhitekton"architect", from ?ρχι- "chief" and τ?κτων "builder") is both the process and the product of planning, designing, and constructing buildings and other physical structures。
從這個(gè)定義上看,架構(gòu)好像是一個(gè)過(guò)程,也不是很清晰。為了講清楚這個(gè)問(wèn)題,我們先來(lái)看看為什么會(huì)產(chǎn)生架構(gòu)。
為什么會(huì)產(chǎn)生架構(gòu)?
想象一下,在最早期,每個(gè)人都完全獨(dú)立生活,衣、食、住、行等等全部都自己搞定,整個(gè)人類都是獨(dú)立的個(gè)體,不相往來(lái)。為了解決人類的延續(xù)的問(wèn)題,自然而然就有男女群居出現(xiàn),這個(gè)時(shí)候就出現(xiàn)了分工了,男性和女性所做的事情就會(huì)有一定的分工,可是人每天生活的基本需求沒(méi)有發(fā)生變化,還是衣食住行等生活必須品。
但是一旦多人分工配合作為生存的整體,力量就顯得強(qiáng)大多了,所以也自然的形成了族群:有些人種田厲害,有些人制作工具厲害,有些地方適合產(chǎn)出糧食,有些地方適合產(chǎn)出棉花等,就自然形成了人的分群,地域的分群。當(dāng)分工發(fā)生后,實(shí)際上每個(gè)人的生產(chǎn)力都得到了提高,因?yàn)樽龅亩际敲總€(gè)人擅長(zhǎng)的事情。
整個(gè)人群的生產(chǎn)力和抵抗環(huán)境的能力都得到了增強(qiáng)。為什么呢?因?yàn)槊總€(gè)人的能力和時(shí)間都是有限的,并且因?yàn)槿说慕Y(jié)構(gòu)的限制,人同時(shí)只能專心做好一件事情,這樣不得已就導(dǎo)致了分工的產(chǎn)生。既然分工發(fā)生了,原來(lái)由一個(gè)人干生存所必需的所有的事情,就變成了很多不同分工的角色合作完成這些事情,這些人必須要通過(guò)某些機(jī)制合在一起,讓每個(gè)人完成生存所必需的事情,這實(shí)際上也導(dǎo)致了交易的發(fā)生(交易這部分就不在這里展開(kāi)了,有機(jī)會(huì)再討論)。
在每個(gè)人都必須自己完成所有生活必須品的生產(chǎn)的時(shí)候,是沒(méi)有架構(gòu)的(當(dāng)然在個(gè)人來(lái)講,同一時(shí)刻只能做有限的事情,在時(shí)間上還是可能會(huì)產(chǎn)生架構(gòu)的)。一旦產(chǎn)生的分工,就把所有的事情,切分成由不同角色的人來(lái)完成,最后再通過(guò)交易,使得每個(gè)個(gè)體都擁有生活必須品,而不需要每個(gè)個(gè)體做所有的事情,只需要每個(gè)個(gè)體做好自己擅長(zhǎng)的事情,并具備一定的交易能力即可。
這實(shí)際上就形成了社會(huì)的架構(gòu)。那么怎么定義架構(gòu)呢?以上面這個(gè)例子為例,把一個(gè)整體(完成人類生存的所有工作)切分成不同的部分(分工),由不同角色來(lái)完成這些分工,并通過(guò)建立不同部分相互溝通的機(jī)制,使得這些部分能夠有機(jī)的結(jié)合為一個(gè)整體,并完成這個(gè)整體所需要的所有活動(dòng),這就是架構(gòu)。由以上的例子,也可以歸納出架構(gòu)產(chǎn)生的動(dòng)力:
必須由人執(zhí)行的工作(不需要人介入,就意味著不需要改造,也就不需要架構(gòu)了)
每個(gè)人的能力有限(每個(gè)人都有自己的強(qiáng)項(xiàng),個(gè)人的產(chǎn)出受限于最短板,并且由于人的結(jié)構(gòu)限制,同時(shí)只能專注于做好一件事情,比如雖然有兩只眼睛,但是只能同時(shí)專注于一件事物,有兩只手,無(wú)法同時(shí)做不同的事情。ps. 雖然有少部分人可以左手畫(huà)圓右手畫(huà)框,但是不是普遍現(xiàn)象)
每個(gè)人的時(shí)間有限(為了減少時(shí)間的投入,必然會(huì)導(dǎo)致把工作分解出去,給擅長(zhǎng)于這些工作的角色來(lái)完成,見(jiàn)2,從而縮短時(shí)間)
人對(duì)目標(biāo)系統(tǒng)有更高的要求(如果滿足于現(xiàn)狀,也就不需要進(jìn)行架構(gòu)了)
目標(biāo)系統(tǒng)的復(fù)雜性使得單個(gè)人完成這個(gè)系統(tǒng),滿足條件2,3(如果個(gè)人就可以完成系統(tǒng)的提高,也不需要?jiǎng)e的人參與,也就不需要架構(gòu)的涉及,只是工匠,并且一般這個(gè)工作對(duì)時(shí)間的要求也不迫切。當(dāng)足夠熟練之后,也會(huì)有一定的架構(gòu)思考,但考慮更多的是如何提高質(zhì)量,提高個(gè)人的時(shí)間效率)
有人可能會(huì)挑戰(zhàn)說(shuō),如果一個(gè)人對(duì)目標(biāo)系統(tǒng)進(jìn)行分解,比如某人建一棟房子,自己采購(gòu)材料,自己搭建,難道也不算架構(gòu)嘛?如果對(duì)于時(shí)間不敏感的話,是會(huì)出現(xiàn)這個(gè)情況的,但是在這種情況下,并不必然導(dǎo)致架構(gòu)的發(fā)生。如果有足夠的自覺(jué),以及足夠的熟練的話,也會(huì)產(chǎn)生架構(gòu)的思考,因?yàn)檫@樣對(duì)于提高生產(chǎn)力是有幫助的,可以縮短建造的時(shí)間,并會(huì)提高房子的質(zhì)量。事實(shí)上建筑的架構(gòu)就是在長(zhǎng)期進(jìn)行這些活動(dòng)后,積累下來(lái)的實(shí)踐。
當(dāng)這5個(gè)條件同時(shí)成立,一定會(huì)產(chǎn)生架構(gòu)。從這個(gè)層面上來(lái)說(shuō),架構(gòu)是人類發(fā)展過(guò)程中,由懵懵懂懂的,被動(dòng)的去認(rèn)識(shí)這個(gè)世界,變成主動(dòng)的去認(rèn)識(shí),并以更高的效率去改造這個(gè)世界的方法。以下我們?cè)倌媒ㄖ?lái)舉例加強(qiáng)一下理解。
最開(kāi)始人類是住在山洞里,住在樹(shù)上的,主要是為了躲避其他猛獸的攻擊,以及減少自然環(huán)境的變化,對(duì)人類生存的挑戰(zhàn)。為了完成這些目標(biāo),人類開(kāi)始學(xué)會(huì)在平地上用樹(shù)木和樹(shù)葉來(lái)建立隔離空間的設(shè)施,這就是建筑的開(kāi)始。但是完全隔離也有很多壞處,慢慢就產(chǎn)生了門窗等設(shè)施。
建筑的本質(zhì)就是從自然環(huán)境中,劃出一塊獨(dú)占的空間,但是仍然能夠通過(guò)門窗等和自然環(huán)境保持溝通。這個(gè)時(shí)候架構(gòu)就已經(jīng)開(kāi)始了。對(duì)地球上的空間進(jìn)行切分,并通過(guò)門窗,地基等,保持和地球以及空間的有機(jī)的溝通。當(dāng)人類開(kāi)始學(xué)會(huì)用火之后,茅棚里面自然而然慢慢就會(huì)被切分為兩部分,一部分用來(lái)燒飯,一部分用來(lái)生活。當(dāng)人的排泄慢慢移入到室內(nèi)后,洗手間也就慢慢的出現(xiàn)了。這就是建筑內(nèi)部的空間切分。
這個(gè)時(shí)候人們對(duì)建筑的需求也就慢慢的越來(lái)越多,空間的切分也會(huì)變成很多種,組合的方式也會(huì)有很多種,比如每個(gè)人住的房子,群居所產(chǎn)生的宗教性質(zhì)的房子,集體活動(dòng)的房子等等。這個(gè)時(shí)候人們就開(kāi)始有意識(shí)的去設(shè)計(jì)房子,架構(gòu)師就慢慢的出現(xiàn)了。一切都是為了滿足人的越來(lái)越高的需求,提升質(zhì)量,減少時(shí)間,更有效率的切分空間,并且讓空間之間更加有機(jī)的進(jìn)行溝通。這就是建筑的架構(gòu)以及建筑的架構(gòu)的演變
總結(jié)一下,什么是架構(gòu),就是:
根據(jù)要解決的問(wèn)題,對(duì)目標(biāo)系統(tǒng)的邊界進(jìn)行界定。
并對(duì)目標(biāo)系統(tǒng)按某個(gè)原則的進(jìn)行切分。切分的原則,要便于不同的角色,對(duì)切分出來(lái)的部分,并行或串行開(kāi)展工作,一般并行才能減少時(shí)間。
并對(duì)這些切分出來(lái)的部分,設(shè)立溝通機(jī)制。
根據(jù)3,使得這些部分之間能夠進(jìn)行有機(jī)的聯(lián)系,合并組裝成為一個(gè)整體,完成目標(biāo)系統(tǒng)的所有工作。
同樣這個(gè)思考可以展開(kāi)到其他的行業(yè),比如企業(yè)的架構(gòu),國(guó)家的架構(gòu),組織架構(gòu),音樂(lè)架構(gòu),色彩架構(gòu),軟件架構(gòu)等等。套用三國(guó)演義的一句話,合久必分,分久必合。架構(gòu)實(shí)際上就是指人們根據(jù)自己對(duì)世界的認(rèn)識(shí),為解決某個(gè)問(wèn)題,主動(dòng)地、有目的地去識(shí)別問(wèn)題,并進(jìn)行分解、合并,解決這個(gè)問(wèn)題的實(shí)踐活動(dòng)。架構(gòu)的產(chǎn)出物,自然就是對(duì)問(wèn)題的分析,以及解決問(wèn)題的方案:包括拆分的原則以及理由,溝通合并的原則以及理由,以及拆分,拆分出來(lái)的各個(gè)部分和合并所對(duì)應(yīng)的角色和所需要的核心能力等。
小編特此為大家整理了全套的java架構(gòu)的學(xué)習(xí)資料免費(fèi)分享給大家:
領(lǐng)取方式:贊同——私信小編 java 免費(fèi)領(lǐng)取。

