日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

可以落地的软件架构

發布時間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 可以落地的软件架构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

搞Java的開發人員交談中經常提及框架和架構兩個詞匯。Java開源社區活躍,大量優秀的開源項目可以學習借鑒這,本來是件好事。但同時又難免會讓人好高騖遠,被空中樓閣所迷惑。

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

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

一般來講,5年的編程實踐經驗,可以對框架有很好的理解;再加上3年的系統設計實踐經驗,完全可以獨立進行架構設計。可以看到很多架構師招聘廣告中,都要求有8~10年的研發經驗,是有一定道理的。那種天資聰穎悟性高,一入行就有高人指點,同時又從事大型項目研發的當屬少數例外了。

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

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

在軟件架構設計方面,我本人才剛剛入門,功力太淺,唯有寫些自己在實踐中的思考瑣碎。

1架構到底是什么

Software Architecture,翻譯過來叫軟件架構,還有的叫軟件體系結構,系統架構。軟件架構用來描述系統中的一些重大決策,好比一幢大廈的骨干結構。

你說,這不扯淡嗎,說了和沒說一個樣。什么叫重大決策?領導每次都是發表了重要講話,到底哪一次是不重要的?

好吧,既然講不清楚這個抽象的概念,我再細化描述下我理解中的架構應該包含的東西:

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

2) 從物理部署上描述清楚每個物理服務器節點上應該部署哪些組件,組件與組件之間的通訊方式,服務器、存儲設備與網絡環境的參數指標。

3) 開發子工程的劃分,子工程的依賴關系。有時還包括具體的技術選型。工作任務的粒度劃分應該與團隊中的人員素質相匹配,讓專業的人做專業的事。

4) 系統中數據的存儲方式,寫文件還是寫數據庫,數據的格式定義。是關系型數據庫還是其它存儲,集中式還是分布式。數據的冗余備份機制。

5) 系統中的運行進程與線程,啟動與停止的先后順序,進程間的通信機制,線程間互斥資源的加鎖與同步。

6) 系統在安全性、可用性、伸縮性、可擴展性、高性能方面的考量。

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

本文的基本觀念是,架構設計是可以清晰表達出來,有效指導開發人員開展設計和編碼工作的。好的架構設計應該是可以落地的,是一個不斷演進改良的過程。

2可以落地的架構設計

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

領導:“小王,我們的系統架構設計已經做好了。你著手開始開發吧,確保高質量完成項目,一個月結項。年輕人只要好好干,升職加薪不在話下,當上CEO迎娶白富美指日可待。”

其邏輯架構圖大致是這樣的:

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

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

問題是,它是放之四海而皆準的一個通用的設計。對小王來說,這個架構設計就是沒有落地的設計,迷茫啊迷茫。

再看一個基于HTTP進行消息通信的系統,其邏輯架構圖如下:

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

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

2) 消息中介服務接收應用系統發來的HTTP請求消息,存儲到數據庫和消息隊列中間件中,并根據業務需要負責對消息進行轉發。

3) 管理控制臺用于對通信子系統進行配置管理,查詢分析。

4) 后臺服務用于實現消息重發服務,歷史數據清理服務。

小王拿到這個圖至少可以做到心中有數,系統的功能模塊有哪些,應該劃分成幾個開發工程,哪些是可以應用開源項目,哪些通用功能可以進行抽取。

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

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

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

也就是說,架構設計的成果是不是足以指導開發人員進行設計編碼,是看項目團隊的人員素質的。一般來說,架構設計的粒度比系統概要設計要粗,但有時候也會細化到概要設計和詳細設計之間。架構設計應該一直細化到能指導團隊開展實際設計開發為止,也就是我上面講述的觀念,架構設計是可以落地的。

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

3架構師的關鍵作用

那架構師對項目組有很大的作用嗎?

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

搞互聯網應用的人說,作用非常大。沒有他,我們的項目分分鐘歇菜,那些復雜的技術問題只有他能解決。

顯然,隨著項目的規模變大,復雜性加大,越凸顯出架構師的作用。

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

架構師的作用在于銜接業務需求與系統設計,根據現實條件,設計出一個最合適的解決方案。將業務需求轉彎為可落地的架構設計,是最大的價值所在。

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

最困難的不是去學習技術產品,解決高并發海量數據的挑戰;而是思維方式的養成。前者有現成的方案可借鑒模仿,后者只能靠經驗去感悟。

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

反過來看,模塊設計又是架構設計的基礎,沒有前期的抽象思維的訓練,沒有足夠的經驗,就無法抽象出粒度適中的組件。抽象出的組件不能落地實現,就會被開發人員認為不切實際,沒有作用。

成為架構師的前提條件,必須是一個有足夠經驗基礎扎實的程序員。知識面要廣泛,見多識廣,還要有一定的技術深度,能理解各種技術的原理,適用業務場景,優劣點。同時,架構師往往還肩負著一個項目的技術攻關,客觀上要求在承受壓力的同時保持足夠的韌性。如果沒有機會去獨立負責一個個項目,是很難從主觀上養成架構思維的,動力不足。

也就是說,是實現業務需求的過程中,實踐提升了開發人員的抽象能力,最終培養成合格的架構師。從這個角度說,我認為架構師和高級開發工程師只是職務上的叫法不同,做的工作很有可能是相同的。通俗點講,一個項目里概要設計是由誰主導的,那這個人無形中已經進行了架構設計的思維訓練。

4架構思維的培養

那架構設計的抽象思維可不可以培養呢?

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

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

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

以上就是我在架構設計過程中的一點所思所想,還非常淺薄。


from:?http://blog.csdn.net/joeyon1985/article/details/42121187

總結

以上是生活随笔為你收集整理的可以落地的软件架构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。