中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
可以落地的軟件架構(gòu)

搞Java的開發(fā)人員交談中經(jīng)常提及框架和架構(gòu)兩個詞匯。Java開源社區(qū)活躍,大量優(yōu)秀的開源項目可以學(xué)習(xí)借鑒這,本來是件好事。但同時又難免會讓人好高騖遠(yuǎn),被空中樓閣所迷惑。

搞Linux下C開發(fā),.Net開發(fā)的同行們就很少言必稱框架與架構(gòu),默默地編碼實實在在地做項目。想起剛剛參加工作時候,公司的CTO告誡年輕同事說,“別跟我扯框架,你先寫了10萬行代碼再和我說”。

為什么公司的資深工程師不愿意和年輕的開發(fā)工程師談這些內(nèi)容呢?因為對架構(gòu)的理解是有一定的經(jīng)驗門檻的,看不見摸不著的抽象概念,說者難以描述清楚,聽著更加難以理解產(chǎn)生共鳴。更何況軟件行業(yè)鐵打的營盤流水的兵,因為國內(nèi)生存壓力大,愿意沉下心去研究技術(shù)的人就更少了。

一般來講,5年的編程實踐經(jīng)驗,可以對框架有很好的理解;再加上3年的系統(tǒng)設(shè)計實踐經(jīng)驗,完全可以獨(dú)立進(jìn)行架構(gòu)設(shè)計??梢钥吹胶芏嗉軜?gòu)師招聘廣告中,都要求有8~10年的研發(fā)經(jīng)驗,是有一定道理的。那種天資聰穎悟性高,一入行就有高人指點,同時又從事大型項目研發(fā)的當(dāng)屬少數(shù)例外了。

我一直苦于無從著手學(xué)起,雖然獨(dú)立設(shè)計做了好幾個項目,對于如何進(jìn)行架構(gòu)設(shè)計心里還是沒底,缺少理論方法指導(dǎo)。國外這方面的著作大都洋洋灑灑,高來高去,翻譯成中文的就更加晦澀難懂。一直到讀了溫昱先生寫的那本《一線架構(gòu)師實踐指南》 ,受到啟蒙有茅塞頓開的感覺。強(qiáng)烈推薦有志于成為架構(gòu)師的同行,去讀下這本實踐中總結(jié)出來的經(jīng)驗之談,內(nèi)容描述深入淺出通俗易懂。

市面上能看到的大都是產(chǎn)品最終的架構(gòu)圖,很少有完整的架構(gòu)設(shè)計文檔公開,包括Apache上的開源項目都很少有介紹架構(gòu)的文檔。更不要說在架構(gòu)設(shè)計的過程中,是如何從草圖開始一步步演進(jìn),成為最終成品的。這種單個案例的深度分析,對我來說是最有學(xué)習(xí)價值的。

在軟件架構(gòu)設(shè)計方面,我本人才剛剛?cè)腴T,功力太淺,唯有寫些自己在實踐中的思考瑣碎。

1架構(gòu)到底是什么

Software Architecture,翻譯過來叫軟件架構(gòu),還有的叫軟件體系結(jié)構(gòu),系統(tǒng)架構(gòu)。軟件架構(gòu)用來描述系統(tǒng)中的一些重大決策,好比一幢大廈的骨干結(jié)構(gòu)。

你說,這不扯淡嗎,說了和沒說一個樣。什么叫重大決策?領(lǐng)導(dǎo)每次都是發(fā)表了重要講話,到底哪一次是不重要的?

好吧,既然講不清楚這個抽象的概念,我再細(xì)化描述下我理解中的架構(gòu)應(yīng)該包含的東西:

1) 從邏輯功能劃分上描述清楚系統(tǒng)中的各個組件(子系統(tǒng)、功能模塊)的作用職責(zé),組件與組件之間的依賴關(guān)系,接口方式及參數(shù)。

2) 從物理部署上描述清楚每個物理服務(wù)器節(jié)點上應(yīng)該部署哪些組件,組件與組件之間的通訊方式,服務(wù)器、存儲設(shè)備與網(wǎng)絡(luò)環(huán)境的參數(shù)指標(biāo)。

3) 開發(fā)子工程的劃分,子工程的依賴關(guān)系。有時還包括具體的技術(shù)選型。工作任務(wù)的粒度劃分應(yīng)該與團(tuán)隊中的人員素質(zhì)相匹配,讓專業(yè)的人做專業(yè)的事。

4) 系統(tǒng)中數(shù)據(jù)的存儲方式,寫文件還是寫數(shù)據(jù)庫,數(shù)據(jù)的格式定義。是關(guān)系型數(shù)據(jù)庫還是其它存儲,集中式還是分布式。數(shù)據(jù)的冗余備份機(jī)制。

5) 系統(tǒng)中的運(yùn)行進(jìn)程與線程,啟動與停止的先后順序,進(jìn)程間的通信機(jī)制,線程間互斥資源的加鎖與同步。

6) 系統(tǒng)在安全性、可用性、伸縮性、可擴(kuò)展性、高性能方面的考量。

綜上,軟件架構(gòu)涵蓋的范圍很廣,難以用一兩句話表達(dá)清楚。最終就造成給大家的感覺是,架構(gòu)是很玄妙的東西,好像只可意會不可言傳一樣。

本文的基本觀念是,架構(gòu)設(shè)計是可以清晰表達(dá)出來,有效指導(dǎo)開發(fā)人員開展設(shè)計和編碼工作的。好的架構(gòu)設(shè)計應(yīng)該是可以落地的,是一個不斷演進(jìn)改良的過程。

2可以落地的架構(gòu)設(shè)計

我見過很多項目做完都沒有架構(gòu)設(shè)計的過程。一上來就是經(jīng)典的三層/四層分層架構(gòu),數(shù)據(jù)庫模型設(shè)計完,然后就直接SSH開發(fā)工程原型搭建好,開工編碼了,系統(tǒng)所有功能在一個Web里面搞定。

領(lǐng)導(dǎo):“小王,我們的系統(tǒng)架構(gòu)設(shè)計已經(jīng)做好了。你著手開始開發(fā)吧,確保高質(zhì)量完成項目,一個月結(jié)項。年輕人只要好好干,升職加薪不在話下,當(dāng)上CEO迎娶白富美指日可待?!?/p>

其邏輯架構(gòu)圖大致是這樣的:

開發(fā)工程師小王拿過這個圖一看,這尼瑪就是天書啊,還要求一個月完工,心中頓時一萬匹草泥馬奔騰而過。

你能說這不是架構(gòu)圖嗎?是,確實是分層的邏輯架構(gòu),還列出了技術(shù)框架選型。

問題是,它是放之四海而皆準(zhǔn)的一個通用的設(shè)計。對小王來說,這個架構(gòu)設(shè)計就是沒有落地的設(shè)計,迷茫啊迷茫。

再看一個基于HTTP進(jìn)行消息通信的系統(tǒng),其邏輯架構(gòu)圖如下:

小王如果拿到這張圖,起碼可以獲得以下信息:

1) 系統(tǒng)整體上分為消息中介、管理控制臺和后臺服務(wù)三個組件。

2) 消息中介服務(wù)接收應(yīng)用系統(tǒng)發(fā)來的HTTP請求消息,存儲到數(shù)據(jù)庫和消息隊列中間件中,并根據(jù)業(yè)務(wù)需要負(fù)責(zé)對消息進(jìn)行轉(zhuǎn)發(fā)。

3) 管理控制臺用于對通信子系統(tǒng)進(jìn)行配置管理,查詢分析。

4) 后臺服務(wù)用于實現(xiàn)消息重發(fā)服務(wù),歷史數(shù)據(jù)清理服務(wù)。

小王拿到這個圖至少可以做到心中有數(shù),系統(tǒng)的功能模塊有哪些,應(yīng)該劃分成幾個開發(fā)工程,哪些是可以應(yīng)用開源項目,哪些通用功能可以進(jìn)行抽取。

如果小王是一個有經(jīng)驗的高級工程師,看了這個圖,結(jié)合需求文檔,直接就可以開始進(jìn)行領(lǐng)域模型設(shè)計,建表,搭建工程開發(fā)功能了。每個組件開發(fā)完后,做下代碼Review確保功能模塊都有實現(xiàn)即可。(對高級工程師來說,代碼就是最好的設(shè)計了)

如果小王是一個中級工程師,則還需要對開發(fā)包進(jìn)行劃分,領(lǐng)域模型類設(shè)計,包與包之間的接口參數(shù)定義,數(shù)據(jù)格式以及一些關(guān)鍵的類圖設(shè)計提供。有疑問的地方進(jìn)行面對面澄清即可。(對中級工程師來說,要先確認(rèn)關(guān)鍵類圖設(shè)計了才能開始開發(fā))

如果小王是一個初級開發(fā)工程師,則需要開發(fā)工程的原型代碼,重要的接口類與核心功能類開發(fā)完后才能交給他。配合詳細(xì)的類圖設(shè)計,時序圖以及狀態(tài)圖設(shè)計進(jìn)行輔助指導(dǎo),開發(fā)過程中進(jìn)行檢查與幫助。(對初級工程師來說,要有代碼范例可參照,詳細(xì)的類名方法參數(shù)定義,并且提供協(xié)助才能開發(fā))

也就是說,架構(gòu)設(shè)計的成果是不是足以指導(dǎo)開發(fā)人員進(jìn)行設(shè)計編碼,是看項目團(tuán)隊的人員素質(zhì)的。一般來說,架構(gòu)設(shè)計的粒度比系統(tǒng)概要設(shè)計要粗,但有時候也會細(xì)化到概要設(shè)計和詳細(xì)設(shè)計之間。架構(gòu)設(shè)計應(yīng)該一直細(xì)化到能指導(dǎo)團(tuán)隊開展實際設(shè)計開發(fā)為止,也就是我上面講述的觀念,架構(gòu)設(shè)計是可以落地的。

甚至有架構(gòu)師說,代碼可以表述出來的架構(gòu),才是好架構(gòu)。水中月夢中花,再唯美也是虛幻的。

3架構(gòu)師的關(guān)鍵作用

那架構(gòu)師對項目組有很大的作用嗎?

搞管理信息系統(tǒng)的人說,沒有用,整天搞一堆看不懂的設(shè)計,還浪費(fèi)我們時間。沒有他,我們照樣做項目。

搞互聯(lián)網(wǎng)應(yīng)用的人說,作用非常大。沒有他,我們的項目分分鐘歇菜,那些復(fù)雜的技術(shù)問題只有他能解決。

顯然,隨著項目的規(guī)模變大,復(fù)雜性加大,越凸顯出架構(gòu)師的作用。

實際上,即使是一個最簡單的管理信息系統(tǒng),也是包含有架構(gòu)設(shè)計在里面的。麻雀雖小五臟俱全。用戶角色權(quán)限管理,審計日志記錄,MVC框架,ORM框架,緩存設(shè)計這些地方都包含有架構(gòu)設(shè)計在里面。

架構(gòu)師的作用在于銜接業(yè)務(wù)需求與系統(tǒng)設(shè)計,根據(jù)現(xiàn)實條件,設(shè)計出一個最合適的解決方案。將業(yè)務(wù)需求轉(zhuǎn)彎為可落地的架構(gòu)設(shè)計,是最大的價值所在。

而如何從業(yè)務(wù)需求中抽象出功能模塊的劃分,通用功能的抽取,組件的粒度如何適中,還要考慮現(xiàn)實環(huán)境的約束,預(yù)留業(yè)務(wù)發(fā)展的空間,如何深入淺出說服對開發(fā)人員理解并接納自己的架構(gòu),這些都是很難的。

最困難的不是去學(xué)習(xí)技術(shù)產(chǎn)品,解決高并發(fā)海量數(shù)據(jù)的挑戰(zhàn);而是思維方式的養(yǎng)成。前者有現(xiàn)成的方案可借鑒模仿,后者只能靠經(jīng)驗去感悟。

對我來說,最難的地方是如何高屋建瓴地,站在系統(tǒng)外,以全局的高度看待多個系統(tǒng)生態(tài)圈,抽象出一個個業(yè)務(wù)組件。開發(fā)人員如果只能盯著眼前的一畝三分地(模塊設(shè)計,OOD),就難以養(yǎng)成架構(gòu)思維。

反過來看,模塊設(shè)計又是架構(gòu)設(shè)計的基礎(chǔ),沒有前期的抽象思維的訓(xùn)練,沒有足夠的經(jīng)驗,就無法抽象出粒度適中的組件。抽象出的組件不能落地實現(xiàn),就會被開發(fā)人員認(rèn)為不切實際,沒有作用。

成為架構(gòu)師的前提條件,必須是一個有足夠經(jīng)驗基礎(chǔ)扎實的程序員。知識面要廣泛,見多識廣,還要有一定的技術(shù)深度,能理解各種技術(shù)的原理,適用業(yè)務(wù)場景,優(yōu)劣點。同時,架構(gòu)師往往還肩負(fù)著一個項目的技術(shù)攻關(guān),客觀上要求在承受壓力的同時保持足夠的韌性。如果沒有機(jī)會去獨(dú)立負(fù)責(zé)一個個項目,是很難從主觀上養(yǎng)成架構(gòu)思維的,動力不足。

也就是說,是實現(xiàn)業(yè)務(wù)需求的過程中,實踐提升了開發(fā)人員的抽象能力,最終培養(yǎng)成合格的架構(gòu)師。從這個角度說,我認(rèn)為架構(gòu)師和高級開發(fā)工程師只是職務(wù)上的叫法不同,做的工作很有可能是相同的。通俗點講,一個項目里概要設(shè)計是由誰主導(dǎo)的,那這個人無形中已經(jīng)進(jìn)行了架構(gòu)設(shè)計的思維訓(xùn)練。

4架構(gòu)思維的培養(yǎng)

那架構(gòu)設(shè)計的抽象思維可不可以培養(yǎng)呢?

我認(rèn)為是可以通過訓(xùn)練培養(yǎng)出來的。通過對代碼重構(gòu)可以促進(jìn)對OOD思維的培養(yǎng)。但是架構(gòu)設(shè)計往往不能頻繁改動,牽涉面廣(如開篇所說架構(gòu)設(shè)計描述的是系統(tǒng)的重大決策),無法像重構(gòu)的方式進(jìn)行修改,只能溫和地進(jìn)行改良。

架構(gòu)設(shè)計的過程,應(yīng)該是不斷地演進(jìn)完成的。經(jīng)驗需要積累,沒有經(jīng)驗時只能一個個項目實踐來培養(yǎng)經(jīng)驗,同時借鑒其他人的架構(gòu)設(shè)計(很難拿到素材)。如果能有機(jī)會和一些資深架構(gòu)師一起工作交流,相信能事半功倍,早點領(lǐng)悟。

我在做架構(gòu)設(shè)計的初期,喜歡拿個筆在本子上畫草圖,幫助自己思考,往往涂掉三十頁紙才確定出第一個可行的版本(用電腦畫圖工具會使思維停頓,思考效率降低,手工畫圖最快捷)。架構(gòu)圖出來后,寫文檔只是描述細(xì)化的過程,有工作量沒有難度。當(dāng)然,以后再遇到類似的業(yè)務(wù)需求的項目,就可以借鑒之前項目的經(jīng)驗了。



本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
系統(tǒng)架構(gòu)師
對軟件架構(gòu)設(shè)計的一些總結(jié)和理解
軟件架構(gòu)師應(yīng)該知道的97件事
探尋軟件架構(gòu)的本質(zhì),到底什么是架構(gòu)?
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服