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