php心水主論壇網(wǎng)站制作網(wǎng)頁(yè)設(shè)計(jì)上海市人大常委會(huì)
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
我的經(jīng)歷及對(duì)軟件架構(gòu)的理解
我個(gè)人從事軟件開發(fā)8年,大大小小軟件做過不計(jì)其數(shù),做過企業(yè)應(yīng)用的架構(gòu)設(shè)計(jì),也做過全新的互聯(lián)網(wǎng)在線SaaS應(yīng)用的架構(gòu)設(shè)計(jì),也做過全新的互聯(lián)網(wǎng)網(wǎng)站的架構(gòu)設(shè)計(jì),現(xiàn)在在做的是歷史遺留的大型互聯(lián)網(wǎng)應(yīng)用的架構(gòu)演進(jìn)工作?;谖覀€(gè)人先談?wù)勛约簩?duì)于軟件架構(gòu)的理解談?wù)勡浖軜?gòu)。
我理解的軟件架構(gòu)是設(shè)計(jì)師根據(jù)軟件的各種類型的需求而設(shè)計(jì)的軟件組成結(jié)構(gòu)的設(shè)計(jì)。
那么這些需求應(yīng)該包括業(yè)務(wù)目標(biāo)、用戶的軟件功能性需求,非功能性需求;軟件開發(fā)組織內(nèi)部的開發(fā)效率需求,代碼質(zhì)量需求;軟件運(yùn)維組織的系統(tǒng)運(yùn)維需求等等綜合需求和設(shè)計(jì)約束等。
軟件架構(gòu)的組成我理解包括軟件開發(fā)期的包以及類的設(shè)計(jì)及關(guān)系,項(xiàng)目工程組成及它們之間的關(guān)系,發(fā)布的應(yīng)用程序及之間交互關(guān)系,軟件系統(tǒng)最終運(yùn)行期間的各種終端硬件、服務(wù)器、網(wǎng)絡(luò)設(shè)備以及網(wǎng)絡(luò)連接設(shè)備等。
但是我覺得我們很多被稱作為“架構(gòu)師”的人其實(shí)天天在做開發(fā),做架構(gòu)設(shè)計(jì)可能對(duì)架構(gòu)的理解也是比較片面的,比較膚淺的,有的就好比是“盲人摸象”只知道局部不知道整體,了解的內(nèi)容不夠系統(tǒng)和全面,有的就好比是”不識(shí)廬山真面目,只緣身在此山中“,在某個(gè)領(lǐng)域做的時(shí)間太久了,思維和認(rèn)知的局限性太強(qiáng),沒有對(duì)具體事務(wù)進(jìn)行抽象,架構(gòu)的本質(zhì)認(rèn)識(shí)不清晰。
《軟件架構(gòu)設(shè)計(jì)》的評(píng)價(jià)
我最近在閱讀溫昱編寫的《軟件架構(gòu)設(shè)計(jì)》一書,溫昱的個(gè)人實(shí)踐經(jīng)驗(yàn)更多的在企業(yè)級(jí)應(yīng)用開發(fā),所以本書中描述的很多內(nèi)容都是企業(yè)級(jí)開發(fā)的一些具體方法及案例,因此對(duì)于我們很多驕傲的互聯(lián)網(wǎng)行業(yè)的”架構(gòu)師“會(huì)不屑一顧看,這些架構(gòu)師會(huì)更多專注于”高并發(fā)、大數(shù)據(jù)、kafka、zookeeper,hadoop、redis"等等諸如這些高大上的具人技術(shù)上,根本看不起做企業(yè)應(yīng)用開發(fā)的人。
但是我個(gè)人粗略看了本書,覺得對(duì)自己在理解軟件架構(gòu)及如何做軟件架構(gòu)設(shè)計(jì)方面有非常大的幫助,互聯(lián)網(wǎng)的軟件它本質(zhì)上也是應(yīng)用軟件,只不過由于它的超大規(guī)?;渴饘?dǎo)致軟件架構(gòu)及具體技術(shù)上產(chǎn)生很多巨大的挑戰(zhàn)而已,但是本書是通用的講解軟件架構(gòu)的概念及通用方法論的,對(duì)互聯(lián)網(wǎng)應(yīng)用同樣是適用的。
《軟件架構(gòu)設(shè)計(jì)》一書對(duì)軟件架構(gòu)的定義
本書應(yīng)該是總結(jié)了軟件行業(yè)很多大牛對(duì)軟件架構(gòu)這個(gè)概念的看法,提取了大家的一些共識(shí),應(yīng)該是還是具有非常強(qiáng)的普適性的,我覺得對(duì)于我們從具體的軟件架構(gòu)中跳出來是有幫助的。
本文總結(jié)行業(yè)大牛對(duì)軟件架構(gòu)概念的定義分成兩派,應(yīng)該說相互聯(lián)系但又互為補(bǔ)充。分別是“組成派”和“決策派”。
組成派
定義是:”軟件系統(tǒng)的架構(gòu)將系統(tǒng)描述為計(jì)算機(jī)組件及組件之間的交互“。這里的組件是廣泛意義上的,是非常抽象的,既可以是軟件也可以硬件,既可以很宏觀,也可以很微小。它的描述是以軟件本身為描述對(duì)象。
如上圖所示,軟件架構(gòu)就是應(yīng)用了一個(gè)組合模式,它是有很多部分組成的。
決策派
定義是軟件系統(tǒng)是一些重要方面的決策集合。它包括這樣一些問題的重要決策:
- 軟件系統(tǒng)的組成。這點(diǎn)上又包含了組合派的定義。
- 選擇組成系統(tǒng)的結(jié)構(gòu)元素和他們之間的接口,以及當(dāng)這些袁術(shù)交互協(xié)作所體現(xiàn)的行為;
- 如何組合這些元素,使它們逐漸組合成更加大的子系統(tǒng);
- 用于指導(dǎo)這個(gè)系統(tǒng)組織的架構(gòu)風(fēng)格;這些元素以及它們的接口、協(xié)作和組合。
- 軟件架構(gòu)不僅這種軟件本身的結(jié)構(gòu)和行為,還注重其它特性:使用、功能性、彈性、重用、可理解性、經(jīng)濟(jì)和技術(shù)的限制及權(quán)衡,甚至包括美學(xué)等。
這個(gè)定義有些復(fù)雜,理解起來也比較困難,我的理解就為了設(shè)計(jì)出一個(gè)符合各種需求,滿足各種角色的要求,在各種約束范圍之類的軟件組成結(jié)構(gòu)而需要做的各種決策集合。它的定義關(guān)注軟件架構(gòu)實(shí)踐的主體——人,以人的決策作為描述對(duì)象;
這是技術(shù)選型的決策示例。
這是系統(tǒng)切分的決策示例。
對(duì)我的啟示
做一個(gè)好的”大架構(gòu)師“,需要做非常多的決策,而做出優(yōu)雅的決策,這不僅僅是技術(shù),還需要藝術(shù),如何在多種復(fù)雜的、矛盾的因數(shù)中做出一個(gè)良好的權(quán)衡,這是對(duì)于人本身的知識(shí)、技能經(jīng)驗(yàn)的深度和廣度都有較高的要求,本身對(duì)我的作用是讓自己知道還有哪些差距,哪些地方還需要提高。
我曾經(jīng)親身經(jīng)歷并了解的一個(gè)錯(cuò)誤決策帶來的后果可以說給大家聽聽,某公司來了一個(gè)具有Oracle背景的CTO,這位牛人來之后,因?yàn)樽约旱募夹g(shù)背景就行政命令要求正在研發(fā)的某系統(tǒng)將數(shù)據(jù)庫(kù)從MySQL修改為Oracle,這位某CTO沒干多久就走了,現(xiàn)在各部門都在熱火朝天的干著去Oracle的事情,因?yàn)檫@個(gè)錯(cuò)誤的決策,給我們苦逼的程序猿帶來多少額外的工作量,這樣翻來覆去的改給公司帶來多少成本損失。所以說沒有科學(xué)嚴(yán)謹(jǐn)?shù)臎Q策方法,某位具有某種陳舊的經(jīng)驗(yàn)的某CTO一句話就產(chǎn)生了一個(gè)及其錯(cuò)誤的決策的事情真是害人不淺。
轉(zhuǎn)載于:https://my.oschina.net/ywbrj042/blog/631653