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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

初探架构之美

發(fā)布時(shí)間:2023/12/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 初探架构之美 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

中國(guó)科學(xué)技術(shù)大學(xué)軟件學(xué)院 ? 王松 ? 原創(chuàng)作品版權(quán)所有轉(zhuǎn)載請(qǐng)注明出處

? ? ? ? 本科時(shí)就聽說過《架構(gòu)之美》這本書,但一直覺得會(huì)很深?yuàn)W而沒敢去看。這次課外閱讀書籍中再次出現(xiàn)這本書,于是下定決心拜讀一下這本著作。

? ? ? ??敲了幾年代碼,總覺得代碼比較實(shí)際,架構(gòu)比較空洞。“虛幻”的架構(gòu)往往讓人摸不著頭腦,因?yàn)榧軜?gòu)難以落在紙上,人們談起架構(gòu)時(shí)又總是以一種只可意會(huì)不可言傳的姿態(tài)。美麗的架構(gòu)無法定義,可它卻一定是自然的、簡(jiǎn)單的、可復(fù)用的、人文的,甚至是外行人也可以細(xì)細(xì)品味其思想的。

? ? ? ??什么是架構(gòu)?我們將“架構(gòu)”作為一個(gè)名詞,它意味著一組工件,包括像藍(lán)圖和構(gòu)建規(guī)范這樣的文檔。這些工件描述了要構(gòu)建的對(duì)象。Jim Waldo和其他人曾指出,沒有什么過程可以保證你學(xué)了以后就能創(chuàng)造出好的架構(gòu),更不必說美的架構(gòu)了,所以我們將更關(guān)注工件,而非過程。從這些能看出,雖然我們無法學(xué)習(xí)創(chuàng)造美的架構(gòu)的步驟,但是我們可以通過學(xué)習(xí)判斷怎樣的架構(gòu)是美的來幫助我們不斷發(fā)現(xiàn)架構(gòu)中的缺陷。那些被我們所津津樂道的架構(gòu),都是大師們?cè)谌粘9ぷ骼锝?jīng)歷了大量的錯(cuò)誤、重復(fù)的嘗試、無數(shù)的代碼、長(zhǎng)久的考驗(yàn)所積淀下來的。如果我們也能找出架構(gòu)中的不足不斷改進(jìn),總有一天會(huì)創(chuàng)造出美的架構(gòu)。

? ? ? ??架構(gòu)之美體現(xiàn)了關(guān)注點(diǎn)的分離與結(jié)合。在軟件設(shè)計(jì)中,設(shè)計(jì)師需要考慮多方面的關(guān)注點(diǎn)。漂亮的設(shè)計(jì)讓這些關(guān)注點(diǎn)盡可能分離,然后以最簡(jiǎn)單的機(jī)制結(jié)合在一起,從而得到高內(nèi)聚、低耦合的系統(tǒng)。而這些關(guān)注點(diǎn)往往都包含以下幾點(diǎn):

功能性

???????? 產(chǎn)品向它的用戶提供哪些功能?

可變性

? ? ? ??軟件將來可能需要哪些改變?哪些改變不太可能發(fā)生,不需要特別容易進(jìn)行這些改變?

性能

? ? ? ??產(chǎn)品將達(dá)到怎樣的性能?

容量

? ? ? ??多少用戶將并發(fā)使用該系統(tǒng)?該系統(tǒng)將為用戶保存多少數(shù)據(jù)?

生態(tài)系統(tǒng)

? ? ? ??在部署的生態(tài)環(huán)境中,該系統(tǒng)將與其他系統(tǒng)進(jìn)行哪些交互?

模塊化

? ? ? ??如何將編寫軟件的任務(wù)分解為工作指派(模塊),特別是這些模塊可以獨(dú)立地開發(fā),并能夠準(zhǔn)確而容易地滿足彼此的需要?

可構(gòu)建性

? ? ? ??如何將軟件構(gòu)建為一組組件,并能夠獨(dú)立實(shí)現(xiàn)和驗(yàn)證這些組件?哪些組件應(yīng)該復(fù)用其他的產(chǎn)品,哪些應(yīng)該從外部供應(yīng)商處獲得?

產(chǎn)品化

? ? ? ??如果產(chǎn)品將以幾種變體的形式存在,如何開發(fā)一個(gè)產(chǎn)品線,并利用這些變體的共性?產(chǎn)品線中的產(chǎn)品以怎樣的步驟開發(fā)?在創(chuàng)建一條軟件產(chǎn)品線時(shí),要進(jìn)行哪些投資?開發(fā)產(chǎn)品線中不同變體的選擇,預(yù)期會(huì)得到怎樣的回報(bào)?特別是,是否可能先開發(fā)最小的有用產(chǎn)品,然后再添加(擴(kuò)展)組件,在不改變以前編寫的代碼的情況下,開發(fā)產(chǎn)品線的其他成員?

安全性

? ? ? ??產(chǎn)品是否需要用戶認(rèn)證,或者必須限制對(duì)數(shù)據(jù)的訪問?數(shù)據(jù)的安全性如何得到保證?如何抵擋“拒絕服務(wù)”攻擊或其他攻擊?

? ? ? ??好的架構(gòu)必須滿足系統(tǒng)的利益相關(guān)人的功能和質(zhì)量關(guān)注點(diǎn)。那么超過足夠好的架構(gòu)是怎樣的呢?我們要從這些好的結(jié)構(gòu)中進(jìn)一步篩選,就要設(shè)立更高的門檻。首先,我們應(yīng)該關(guān)注架構(gòu)的實(shí)用性,它必須每天都被許多人使用。但是,在使用它之前它應(yīng)該先構(gòu)建,所以我們應(yīng)該關(guān)注該架構(gòu)的可構(gòu)建性。接下來,我們想尋找那些展示了持久性的架構(gòu),也就是說,那些經(jīng)過了時(shí)間考驗(yàn)的架構(gòu)。最后,我們還想尋找這樣一些架構(gòu),它們的特征讓使用、構(gòu)建、測(cè)試這些架構(gòu)的開發(fā)人員和測(cè)試人員,以及由它而形成的系統(tǒng)的用戶感到由衷的高興。

? ? ? ??作者通過“混亂大都市”和“設(shè)計(jì)之城”兩個(gè)例子向我們展示了架構(gòu)如何對(duì)軟件項(xiàng)目產(chǎn)生深遠(yuǎn)的影響。架構(gòu)幾乎會(huì)影響所有與之相關(guān)的人和事。從這兩個(gè)例子,我們可以看出好的架構(gòu)是很多因素的結(jié)果,包括以下方面(但不限于此):

  • 確實(shí)進(jìn)行有意為之的前端設(shè)計(jì)。(許多項(xiàng)目甚至還沒開始,就因?yàn)檫@一點(diǎn)而失敗了。)
  • 設(shè)計(jì)者的素質(zhì)和經(jīng)驗(yàn)。(以前犯過一些錯(cuò)誤是有幫助的,這能在下一次為你指出正確方向!)
  • 在開發(fā)過程中,保持清晰的設(shè)計(jì)觀點(diǎn)。
  • 授權(quán)團(tuán)隊(duì)負(fù)責(zé)軟件的整體設(shè)計(jì),而團(tuán)隊(duì)也承擔(dān)起這一責(zé)任。
  • 不要害怕改變?cè)O(shè)計(jì):沒有什么是一成不變的。
  • 讓合適的人加入到團(tuán)隊(duì)中,包括設(shè)計(jì)者、程序員和經(jīng)理,確保開發(fā)團(tuán)隊(duì)的規(guī)模合適。確保他們具有健康的工作關(guān)系,因?yàn)檫@些關(guān)系將不可避免地影響代碼的結(jié)構(gòu)。
  • 在合適的時(shí)候做出設(shè)計(jì)決定,當(dāng)你知道所有必要信息時(shí)再做出決定。延遲那些暫時(shí)不能做出的決定。
  • 好的項(xiàng)目管理,以及合適的最后期限。

? ? ? ??最后作者通過企業(yè)級(jí)應(yīng)用架構(gòu)、系統(tǒng)架構(gòu)、最終用戶應(yīng)用架構(gòu)以及語言與架構(gòu)這些方面舉例說明了經(jīng)典架構(gòu)的美麗之處。

? ? ? ??我們總是認(rèn)為不良的架構(gòu)只是會(huì)影響到軟件的代碼,但是讀完這本書后,我發(fā)現(xiàn),不良的架構(gòu)的影響不僅限于代碼,它會(huì)進(jìn)一步影響到人、團(tuán)隊(duì)、過程和時(shí)間表。開發(fā)團(tuán)隊(duì)的成員,尤其是新成員會(huì)被系統(tǒng)的復(fù)雜性驚嚇到,項(xiàng)目會(huì)給他們帶來巨大的壓力,尤其是規(guī)劃新的功能會(huì)導(dǎo)致極大的恐懼。由于系統(tǒng)的復(fù)雜性,所以即使是最簡(jiǎn)單的變更都需要花費(fèi)大量的實(shí)踐,從而導(dǎo)致管理項(xiàng)目的開發(fā)周期顯得極其困難。

? ? ? ??記得之前和宿舍的人一起討論工程實(shí)踐的概要設(shè)計(jì)時(shí),他問了我?guī)讉€(gè)架構(gòu)設(shè)計(jì)的問題,但當(dāng)我問到他們的需求是什么時(shí),他卻沒法給我明確的答復(fù)。我無法想象他們?cè)跊]有抓準(zhǔn)需求的情況下做出的概要設(shè)計(jì)會(huì)是什么樣的。正如此書中所講的,“重要的是要在開始設(shè)計(jì)系統(tǒng)之前知道你打算設(shè)計(jì)什么。如果你不知道它是什么,也不知道它將做什么,暫時(shí)不要開始設(shè)計(jì)它。只設(shè)計(jì)你知道需求的東西。”

? ? ? ??“混亂大都市”之所以混亂的一個(gè)重要原因:在項(xiàng)目開始之初,團(tuán)隊(duì)并不知道要構(gòu)建的是什么。在規(guī)劃“大都市”的早期階段,有太多的架構(gòu)師。面對(duì)糊涂的需求,他們都拿著一塊拼不起來的拼圖,試圖獨(dú)自工作。他們?cè)诠ぷ鲿r(shí)沒有考慮到整個(gè)項(xiàng)目,所以當(dāng)他們?cè)噲D將這些拼圖拼在一起時(shí),就拼不起來了。沒有時(shí)間進(jìn)一步思考架構(gòu),軟件設(shè)計(jì)的各個(gè)部分有一些重疊,于是開始了“大都市”的城市規(guī)劃災(zāi)難。

? ? ? ??很多同學(xué)不理解工程實(shí)踐開題時(shí)為什么要做那么細(xì)致的需求調(diào)研,還要對(duì)系統(tǒng)做出整體的概要設(shè)計(jì)。看完這本書,我開始明白這么做的意圖。如果我們?cè)谛枨蟛磺?#xff0c;整體設(shè)計(jì)不明的情況下就開始了項(xiàng)目的開發(fā),最后我們的軟件肯定會(huì)成為另一個(gè)“混亂大都市”,甚至僅僅只能稱作“凌亂小房間”。

? ? ? ??對(duì)于我們平時(shí)遇到的這些小項(xiàng)目而言,我們需要決定的關(guān)注點(diǎn)可能沒有那些架構(gòu)名人堂中的經(jīng)典之作那么多。但我們同樣應(yīng)該在項(xiàng)目的早期就決定一些基本的關(guān)注點(diǎn),它能確保代碼能夠容易而一致地增長(zhǎng),這些決定包括:頂層文件結(jié)構(gòu),我們?nèi)绾螌?duì)事物命名,“內(nèi)部”展示的風(fēng)格,共用的編碼慣例,選擇單元測(cè)試框架,支持基礎(chǔ)設(shè)施(例如版本控制、適合的構(gòu)建系統(tǒng)的持續(xù)集成)。

? ? ? ??當(dāng)作出了設(shè)計(jì)決定后,就要進(jìn)行品質(zhì)控制過程。常見的品質(zhì)控制手段包括:結(jié)對(duì)編程,對(duì)沒有結(jié)對(duì)編程的工作進(jìn)行代碼/設(shè)計(jì)復(fù)審,對(duì)每一段代碼進(jìn)行單元測(cè)試。一提到測(cè)試,估計(jì)很多程序員就開始煩惱了。大部分都很討厭測(cè)試環(huán)節(jié),但是測(cè)試卻又非常重要。一組好的自動(dòng)化測(cè)試可以讓我們?cè)谶M(jìn)行架構(gòu)變更時(shí)風(fēng)險(xiǎn)最小。編寫單元測(cè)試確保了每個(gè)代碼模塊的內(nèi)聚性,也確保了與系統(tǒng)其他部分之間的松耦合。單元測(cè)試迫使我們仔細(xì)考慮每個(gè)單元的接口,確保該單元的API是有意義的,內(nèi)部是一致的。

? ? ? ??讀完整本書后感覺架構(gòu)不再是那么神秘了,而是與每一位程序員都息息相關(guān)的,只要不斷從所經(jīng)歷的項(xiàng)目的架構(gòu)中吸取經(jīng)驗(yàn),我們也能成為架構(gòu)大師。在讀這本書期間,我擔(dān)任著工程實(shí)踐項(xiàng)目的組長(zhǎng),架構(gòu)的設(shè)計(jì)也是我的任務(wù)之一。利用書中所學(xué),我也開始一步步規(guī)劃起屬于我的“設(shè)計(jì)之城”。紙上得來終覺淺,只有在實(shí)踐中慢慢摸索,才能體會(huì)到架構(gòu)的美麗之處。

總結(jié)

以上是生活随笔為你收集整理的初探架构之美的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。