|
最近看了下《架構(gòu)之美這本書(shū)》,摘錄了部分書(shū)中的內(nèi)容,在摘錄書(shū)里面內(nèi)容前先談?wù)勎易约簩?duì)架構(gòu)的看法。架構(gòu)應(yīng)該包括了功能性架構(gòu)和非功能性架構(gòu)兩個(gè)方面的內(nèi)容。我們常說(shuō)的J2EE,DotNET標(biāo)準(zhǔn)架構(gòu)框架更多的是非功能性架構(gòu)的范疇;而談的子系統(tǒng),組件劃分,接口設(shè)計(jì),復(fù)用等內(nèi)容涉及到功能性架構(gòu)的內(nèi)容。J2EE架構(gòu)的標(biāo)準(zhǔn)模板很容易找到和借用,但是并不代表你是一個(gè)合格的架構(gòu)師,架構(gòu)師必須深入到功能性架構(gòu)中,真正的做好需求和實(shí)現(xiàn)中間的橋梁。正如現(xiàn)在好的PPT模板一大堆,但是并不代表你能夠做出好的PPT來(lái),PPT的模板僅僅是術(shù),而PPT內(nèi)容和思維才是道,而這里又是我們經(jīng)常講到的模式的問(wèn)題,即根據(jù)我們的目標(biāo)如何選擇相應(yīng)的圖表和模板來(lái)最合理,最簡(jiǎn)單的展現(xiàn)我們的內(nèi)容。
從靜態(tài)分析的角度來(lái)考慮,架構(gòu)的核心即是分解和集成。我們面對(duì)的現(xiàn)實(shí)業(yè)務(wù)和需求可能太龐大了,如果不去分解我們的構(gòu)建根本都無(wú)法下手,我們就無(wú)法真正理解業(yè)務(wù)細(xì)節(jié)。因此子系統(tǒng)和組件劃分是分解重要內(nèi)容,分解重要原則又是高內(nèi)聚,松耦合。由于分解產(chǎn)生了組件間的交互,因此需要根據(jù)關(guān)注接口的分析和設(shè)計(jì),架構(gòu)師的一個(gè)關(guān)鍵職能就是要屏蔽系統(tǒng)本身復(fù)雜性,將復(fù)雜性作為一個(gè)黑盒控制在自己手里,對(duì)外只需要暴露盡可能簡(jiǎn)單的接口。而在分解的時(shí)候又必須要考慮集成,架構(gòu)師在自己腦海里面已經(jīng)有了目標(biāo)系統(tǒng)的樣子,他們會(huì)很有信心分解的組件能夠通過(guò)當(dāng)初定義的接口很好的集成在一起。正如汽車(chē)制造一樣,所有的零備件都出來(lái)了卻發(fā)現(xiàn)它們根本無(wú)法組裝成一臺(tái)汽車(chē),這對(duì)架構(gòu)師是最大的悲哀。系統(tǒng)都還沒(méi)有出來(lái),而架構(gòu)師就能夠游刃有余的做這些事情,靠的不僅僅是多年的設(shè)計(jì)和開(kāi)發(fā)實(shí)踐,更多的則是在實(shí)踐過(guò)程中的抽象思維和模式總結(jié)。
從動(dòng)態(tài)分析的角度來(lái)考慮,現(xiàn)實(shí)世界中的原始需求進(jìn)入,最終出來(lái)的則是滿足需求的功能實(shí)現(xiàn),在這個(gè)過(guò)程中涉及到一系列的內(nèi)部程序流轉(zhuǎn)流程,前臺(tái)界面,業(yè)務(wù)邏輯,數(shù)據(jù)訪問(wèn),數(shù)據(jù)實(shí)體,公用組件等,這些層次之間應(yīng)該怎樣去交互是在架構(gòu)設(shè)計(jì)中必須要考慮清楚的問(wèn)題。在這方面我喜歡用架構(gòu)機(jī)制這個(gè)詞語(yǔ),機(jī)制往往并不是靜態(tài)詞匯,因?yàn)橐罹繖C(jī)制就必須要搞清楚事件觸發(fā),功能調(diào)用,訪問(wèn)順序等一系列問(wèn)題。簡(jiǎn)單的講,架構(gòu)機(jī)制要回答一個(gè)重要的問(wèn)題,即你設(shè)計(jì)出的分布式框架如何能夠滿足輸入的需求變成最終輸出的功能,中間究竟經(jīng)歷了哪些步驟?安全性如何保證?性能如何保證?可擴(kuò)展性又如何保證?要回答這些問(wèn)題你都必須給出這些問(wèn)題的解決方案的運(yùn)行機(jī)制,而只有大家認(rèn)可了運(yùn)行機(jī)制,或者新出來(lái)的模塊已經(jīng)在新架構(gòu)上運(yùn)行驗(yàn)證了,才能夠講從架構(gòu)框架上基本上已經(jīng)成熟了。
架構(gòu)本身不是目標(biāo),而簡(jiǎn)單實(shí)用并且支持靈活擴(kuò)展的系統(tǒng)才是我們追求的目標(biāo)。架構(gòu)師思維意識(shí)里面更加重要的是實(shí)用性和經(jīng)濟(jì)性而非理想化,由于業(yè)務(wù)域和問(wèn)題域的不同沒(méi)有完全可以照搬的架構(gòu),在架構(gòu)設(shè)計(jì)上追求一定的可擴(kuò)展性,要杜絕過(guò)度架構(gòu)和架構(gòu)理想化的問(wèn)題。就如何建造一個(gè)建筑,如果我們最終得不到一個(gè)實(shí)用的的建筑物,你再怎么向客戶吹噓你的設(shè)計(jì)圖紙和建造框架如何合理都是徒勞的。
在《人月神話》里面談到,給我看你的流程圖而隱藏起你的表,我將仍然莫名其妙;而給我看你的表,我將不再需要你的流程圖,因?yàn)樗鼈兲黠@了。足見(jiàn)架構(gòu)中靜態(tài)分析的成分遠(yuǎn)遠(yuǎn)的大于了動(dòng)態(tài)分析,而靜態(tài)分析的重點(diǎn)即我們所說(shuō)的對(duì)象,我需要觀察現(xiàn)實(shí)世界有哪些對(duì)象以及這些對(duì)象之間存在的關(guān)系,而這些內(nèi)容通過(guò)抽象之后正是我們談的數(shù)據(jù)架構(gòu)。在SOA的參考模型中ESB層面的重點(diǎn)則是通過(guò)流程分析和分解后形成的數(shù)據(jù)集成架構(gòu),有了這個(gè)才可能進(jìn)一步的進(jìn)行基于流程編排的動(dòng)態(tài)架構(gòu)。即我們先拋開(kāi)流程,首先通過(guò)分解方法來(lái)找尋數(shù)據(jù)形成靜態(tài)的數(shù)據(jù)架構(gòu),然后再結(jié)合流程來(lái)觀察數(shù)據(jù)的形成和轉(zhuǎn)化過(guò)程。
以下內(nèi)容摘錄自《架構(gòu)之美》一書(shū):
有人問(wèn)過(guò)我:架構(gòu)的最主要產(chǎn)出是什么?我的答案是圖。這里面有兩層含義:一層含義是如同建筑師描繪的藍(lán)圖一樣,用于引導(dǎo)實(shí)施者;另一層含義是架構(gòu)師頭腦中清晰的目標(biāo)系統(tǒng)。如果架構(gòu)師頭腦中沒(méi)有清晰的圖像,他是沒(méi)有辦法把它畫(huà)出來(lái)的。
架構(gòu)是一個(gè)過(guò)程,而非一個(gè)結(jié)果。架構(gòu)是架構(gòu)師洞見(jiàn)內(nèi)在結(jié)構(gòu)、規(guī)律、原則和邏輯的過(guò)程。真正的架構(gòu)師是可以將自己放在系統(tǒng)中去的(例如作為系統(tǒng)中的任何一個(gè)角色),只有清晰地理解系統(tǒng),才能簡(jiǎn)潔的描述它。而當(dāng)架構(gòu)師拿出了他所描述的作品的時(shí)候,架構(gòu)這個(gè)過(guò)程就已經(jīng)結(jié)束了。
美麗的架構(gòu)應(yīng)盡可能的精益,并且是演進(jìn)式發(fā)展的。當(dāng)你架構(gòu)一個(gè)支持億萬(wàn)人同時(shí)在線的大規(guī)模網(wǎng)站系統(tǒng)的時(shí)候,你無(wú)法從一開(kāi)始就提供最完善的解決方案,它應(yīng)該是隨著用戶的增長(zhǎng)而可擴(kuò)展的。精益的實(shí)現(xiàn)讓你避免過(guò)度設(shè)計(jì),也使架構(gòu)不斷演進(jìn)并趨于完美。
美麗的架構(gòu)無(wú)法定義,而它卻是一種自然的,簡(jiǎn)單的,可復(fù)用的,人文的,甚至是外行人也可以細(xì)細(xì)品味其思想的。當(dāng)我看到超市的多個(gè)收銀臺(tái)前排滿長(zhǎng)隊(duì),便想到服務(wù)器并發(fā)處理性能和容量;當(dāng)我看到十字路口的車(chē)輛需要等待轉(zhuǎn)彎的時(shí)候,便想到用緩存的思想來(lái)提高交通吞吐量。
如何設(shè)計(jì)出美麗的架構(gòu)?從代碼邏輯到物理網(wǎng)絡(luò),從單機(jī)到分布式,無(wú)數(shù)的技術(shù)可以供架構(gòu)師選擇;如分層,組件化,服務(wù)化,標(biāo)準(zhǔn)化,緩存,分離,隊(duì)列,復(fù)制,冗余,代理等,不過(guò)它們僅僅是術(shù)的范疇,而何時(shí)何處如何恰到好處地使用它們才是道的范疇,比如頓悟變化的道理,在博弈中尋找平衡,以系統(tǒng)化的角度來(lái)分析問(wèn)題,尋找相對(duì)與絕對(duì)的奧秘,開(kāi)放的心態(tài)。
在軟件設(shè)計(jì)中,設(shè)計(jì)師需要考慮多方面的關(guān)注點(diǎn)。漂亮的架構(gòu)設(shè)計(jì)讓這些關(guān)注點(diǎn)盡可能分離,然后以一種最簡(jiǎn)單的機(jī)制結(jié)合在一起,從而得到高內(nèi)聚,低耦合的系統(tǒng)。愛(ài)因斯坦說(shuō)過(guò),“讓它盡可能簡(jiǎn)單,但不要過(guò)于簡(jiǎn)單”,我們所需要考慮所有必須考慮的關(guān)注點(diǎn),然后用簡(jiǎn)單漂亮的架構(gòu)來(lái)體現(xiàn)我們的關(guān)注點(diǎn),以體現(xiàn)架構(gòu)設(shè)計(jì)的經(jīng)濟(jì)性。
架構(gòu)提供一種共同的方法來(lái)解決我們軟件開(kāi)發(fā)中面臨的實(shí)際問(wèn)題,架構(gòu)的核心是概念完整性,即一組抽象和規(guī)則,在整個(gè)系統(tǒng)中盡可能簡(jiǎn)單的使用他們。好的建筑應(yīng)該通過(guò)美觀,堅(jiān)固和實(shí)用三個(gè)方面來(lái)衡量,而好的架構(gòu)也正是這三方面的平衡和配合,沒(méi)有哪一個(gè)方面比其它方面更加重要。
it知識(shí)庫(kù):談軟件架構(gòu),轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。