架構(gòu)漫談:若不讓你認(rèn)識什么是架構(gòu)鸵荠? 我將退出編程界诫龙。
本文是漫談架構(gòu)的第一篇落午,作者將會通過類比的方式來介紹什么是架構(gòu)以及為什么會產(chǎn)生架構(gòu)谎懦。
一直以來,在軟件行業(yè)溃斋,對于什么是架構(gòu)界拦,都有很多的爭論,每個(gè)人都有自己的理解梗劫。甚至于很多架構(gòu)師一說架構(gòu)享甸,就開始談?wù)撌裁磻?yīng)用架構(gòu)、硬件架構(gòu)梳侨、數(shù)據(jù)架構(gòu)等等蛉威。我曾經(jīng)也到處尋找過架構(gòu)的定義,請教過很多人走哺,結(jié)果發(fā)現(xiàn)蚯嫌,沒有大家都認(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)的剪菱。所以,我覺得有必要從源頭開始拴签,把架構(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è)過程曹阔,也不是很清晰半开。為了講清楚這個(gè)問題,我們先來看看為什么會產(chǎn)生架構(gòu)赃份。
為什么會產(chǎn)生架構(gòu)寂拆?
想象一下奢米,在最早期,每個(gè)人都完全獨(dú)立生活纠永,衣鬓长、食、住渺蒿、行等等全部都自己搞定痢士,整個(gè)人類都是獨(dú)立的個(gè)體,不相往來茂装。為了解決人類的延續(xù)的問題怠蹂,自然而然就有男女群居出現(xiàn),這個(gè)時(shí)候就出現(xiàn)了分工了少态,男性和女性所做的事情就會有一定的分工城侧,可是人每天生活的基本需求沒有發(fā)生變化,還是衣食住行等生活必須品彼妻。
但是一旦多人分工配合作為生存的整體嫌佑,力量就顯得強(qiáng)大多了,所以也自然的形成了族群:有些人種田厲害侨歉,有些人制作工具厲害屋摇,有些地方適合產(chǎn)出糧食,有些地方適合產(chǎn)出棉花等幽邓,就自然形成了人的分群炮温,地域的分群。當(dāng)分工發(fā)生后牵舵,實(shí)際上每個(gè)人的生產(chǎn)力都得到了提高柒啤,因?yàn)樽龅亩际敲總€(gè)人擅長的事情。
整個(gè)人群的生產(chǎn)力和抵抗環(huán)境的能力都得到了增強(qiáng)畸颅。為什么呢担巩?因?yàn)槊總€(gè)人的能力和時(shí)間都是有限的,并且因?yàn)槿说慕Y(jié)構(gòu)的限制没炒,人同時(shí)只能專心做好一件事情涛癌,這樣不得已就導(dǎo)致了分工的產(chǎn)生。既然分工發(fā)生了送火,原來由一個(gè)人干生存所必需的所有的事情祖很,就變成了很多不同分工的角色合作完成這些事情,這些人必須要通過某些機(jī)制合在一起漾脂,讓每個(gè)人完成生存所必需的事情,這實(shí)際上也導(dǎo)致了交易的發(fā)生(交易這部分就不在這里展開了胚鸯,有機(jī)會再討論)骨稿。
在每個(gè)人都必須自己完成所有生活必須品的生產(chǎn)的時(shí)候,是沒有架構(gòu)的(當(dāng)然在個(gè)人來講,同一時(shí)刻只能做有限的事情坦冠,在時(shí)間上還是可能會產(chǎn)生架構(gòu)的)形耗。一旦產(chǎn)生的分工,就把所有的事情辙浑,切分成由不同角色的人來完成激涤,最后再通過交易,使得每個(gè)個(gè)體都擁有生活必須品判呕,而不需要每個(gè)個(gè)體做所有的事情倦踢,只需要每個(gè)個(gè)體做好自己擅長的事情,并具備一定的交易能力即可侠草。
這實(shí)際上就形成了社會的架構(gòu)辱挥。那么怎么定義架構(gòu)呢?以上面這個(gè)例子為例边涕,把一個(gè)整體(完成人類生存的所有工作)切分成不同的部分(分工)晤碘,由不同角色來完成這些分工,并通過建立不同部分相互溝通的機(jī)制功蜓,使得這些部分能夠有機(jī)的結(jié)合為一個(gè)整體园爷,并完成這個(gè)整體所需要的所有活動,這就是架構(gòu)式撼。由以上的例子童社,也可以歸納出架構(gòu)產(chǎn)生的動力:
必須由人執(zhí)行的工作(不需要人介入,就意味著不需要改造端衰,也就不需要架構(gòu)了)
每個(gè)人的能力有限(每個(gè)人都有自己的強(qiáng)項(xiàng)叠洗,個(gè)人的產(chǎn)出受限于最短板,并且由于人的結(jié)構(gòu)限制旅东,同時(shí)只能專注于做好一件事情灭抑,比如雖然有兩只眼睛,但是只能同時(shí)專注于一件事物抵代,有兩只手腾节,無法同時(shí)做不同的事情。ps. 雖然有少部分人可以左手畫圓右手畫框荤牍,但是不是普遍現(xiàn)象)
每個(gè)人的時(shí)間有限(為了減少時(shí)間的投入案腺,必然會導(dǎo)致把工作分解出去,給擅長于這些工作的角色來完成康吵,見2劈榨,從而縮短時(shí)間)
人對目標(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è)工作對時(shí)間的要求也不迫切。當(dāng)足夠熟練之后棒妨,也會有一定的架構(gòu)思考踪古,但考慮更多的是如何提高質(zhì)量,提高個(gè)人的時(shí)間效率)
有人可能會挑戰(zhàn)說券腔,如果一個(gè)人對目標(biāo)系統(tǒng)進(jìn)行分解伏穆,比如某人建一棟房子,自己采購材料颅眶,自己搭建蜈出,難道也不算架構(gòu)嘛?如果對于時(shí)間不敏感的話涛酗,是會出現(xiàn)這個(gè)情況的铡原,但是在這種情況下,并不必然導(dǎo)致架構(gòu)的發(fā)生商叹。如果有足夠的自覺燕刻,以及足夠的熟練的話,也會產(chǎn)生架構(gòu)的思考剖笙,因?yàn)檫@樣對于提高生產(chǎn)力是有幫助的卵洗,可以縮短建造的時(shí)間,并會提高房子的質(zhì)量弥咪。事實(shí)上建筑的架構(gòu)就是在長期進(jìn)行這些活動后过蹂,積累下來的實(shí)踐。
當(dāng)這5個(gè)條件同時(shí)成立聚至,一定會產(chǎn)生架構(gòu)酷勺。從這個(gè)層面上來說,架構(gòu)是人類發(fā)展過程中扳躬,由懵懵懂懂的脆诉,被動的去認(rèn)識這個(gè)世界,變成主動的去認(rèn)識贷币,并以更高的效率去改造這個(gè)世界的方法击胜。以下我們再拿建筑來舉例加強(qiáng)一下理解。
最開始人類是住在山洞里役纹,住在樹上的偶摔,主要是為了躲避其他猛獸的攻擊,以及減少自然環(huán)境的變化促脉,對人類生存的挑戰(zhàn)辰斋。為了完成這些目標(biāo)信不,人類開始學(xué)會在平地上用樹木和樹葉來建立隔離空間的設(shè)施,這就是建筑的開始亡呵。但是完全隔離也有很多壞處,慢慢就產(chǎn)生了門窗等設(shè)施硫戈。
建筑的本質(zhì)就是從自然環(huán)境中锰什,劃出一塊獨(dú)占的空間,但是仍然能夠通過門窗等和自然環(huán)境保持溝通丁逝。這個(gè)時(shí)候架構(gòu)就已經(jīng)開始了汁胆。對地球上的空間進(jìn)行切分,并通過門窗霜幼,地基等嫩码,保持和地球以及空間的有機(jī)的溝通。當(dāng)人類開始學(xué)會用火之后罪既,茅棚里面自然而然慢慢就會被切分為兩部分铸题,一部分用來燒飯,一部分用來生活琢感。當(dāng)人的排泄慢慢移入到室內(nèi)后丢间,洗手間也就慢慢的出現(xiàn)了。這就是建筑內(nèi)部的空間切分驹针。
這個(gè)時(shí)候人們對建筑的需求也就慢慢的越來越多烘挫,空間的切分也會變成很多種,組合的方式也會有很多種柬甥,比如每個(gè)人住的房子饮六,群居所產(chǎn)生的宗教性質(zhì)的房子,集體活動的房子等等苛蒲。這個(gè)時(shí)候人們就開始有意識的去設(shè)計(jì)房子卤橄,架構(gòu)師就慢慢的出現(xiàn)了。一切都是為了滿足人的越來越高的需求撤防,提升質(zhì)量虽风,減少時(shí)間,更有效率的切分空間寄月,并且讓空間之間更加有機(jī)的進(jìn)行溝通辜膝。這就是建筑的架構(gòu)以及建筑的架構(gòu)的演變
總結(jié)一下,什么是架構(gòu)漾肮,就是:
根據(jù)要解決的問題厂抖,對目標(biāo)系統(tǒng)的邊界進(jìn)行界定。
并對目標(biāo)系統(tǒng)按某個(gè)原則的進(jìn)行切分克懊。切分的原則忱辅,要便于不同的角色七蜘,對切分出來的部分,并行或串行開展工作墙懂,一般并行才能減少時(shí)間橡卤。
并對這些切分出來的部分,設(shè)立溝通機(jī)制损搬。
根據(jù)3碧库,使得這些部分之間能夠進(jìn)行有機(jī)的聯(lián)系,合并組裝成為一個(gè)整體巧勤,完成目標(biāo)系統(tǒng)的所有工作嵌灰。
同樣這個(gè)思考可以展開到其他的行業(yè),比如企業(yè)的架構(gòu)颅悉,國家的架構(gòu)沽瞭,組織架構(gòu),音樂架構(gòu)剩瓶,色彩架構(gòu)驹溃,軟件架構(gòu)等等。套用三國演義的一句話儒搭,合久必分吠架,分久必合。架構(gòu)實(shí)際上就是指人們根據(jù)自己對世界的認(rèn)識搂鲫,為解決某個(gè)問題傍药,主動地、有目的地去識別問題魂仍,并進(jìn)行分解拐辽、合并,解決這個(gè)問題的實(shí)踐活動擦酌。架構(gòu)的產(chǎn)出物俱诸,自然就是對問題的分析,以及解決問題的方案:包括拆分的原則以及理由赊舶,溝通合并的原則以及理由睁搭,以及拆分,拆分出來的各個(gè)部分和合并所對應(yīng)的角色和所需要的核心能力等笼平。
小編特此為大家整理了全套的java架構(gòu)的學(xué)習(xí)資料免費(fèi)分享給大家:
領(lǐng)取方式:贊同——私信小編 java 免費(fèi)領(lǐng)取园骆。