- 相關(guān)推薦
如何成為優(yōu)秀的系統(tǒng)架構(gòu)師
系統(tǒng)架構(gòu)師的工作是復(fù)雜設(shè)計(jì)總體解決方案以及領(lǐng)域?qū)ο蟮倪壿嫼臀锢聿季?這是一項(xiàng)在復(fù)雜環(huán)境中高風(fēng)險(xiǎn)、高影響力的活動(dòng)。那么如何才能成為一名優(yōu)秀的系統(tǒng)架構(gòu)師呢,一起來學(xué)習(xí)學(xué)習(xí)吧!
1、軟件架構(gòu)的定義:
軟件架構(gòu)(Software Architecture)也稱之為軟件體系結(jié)構(gòu),它是一組有關(guān)如下要素的重要決策:軟件系統(tǒng)的組織,構(gòu)成系統(tǒng)的結(jié)構(gòu)化元素,接口和它們相互協(xié)作的行為的選擇,結(jié)構(gòu)化元素和行為元素組合成粒度更大的子系統(tǒng)方式的選擇,以及指導(dǎo)這一組織(元素及其接口、協(xié)作和組合方式)的架構(gòu)風(fēng)格的選擇。換句話說,軟件架構(gòu)實(shí)際上是對(duì)系統(tǒng)整體結(jié)構(gòu)設(shè)計(jì)的刻劃,系統(tǒng)架構(gòu)師是做全局的、整體的把握工作。架構(gòu)的組成與決策是架構(gòu)設(shè)計(jì)的兩個(gè)基本概念。架構(gòu)=>藍(lán)圖+規(guī)則+解決方案
軟件架構(gòu)是一個(gè)認(rèn)識(shí)事物的過程:原型、發(fā)現(xiàn)、改進(jìn)、再發(fā)現(xiàn)、再改進(jìn),這是軟件開發(fā)的必由螺旋。
2、架構(gòu)師成長路線圖:
系統(tǒng)架構(gòu)師已經(jīng)不僅僅是技術(shù)精湛的技術(shù)專家,他需要與業(yè)務(wù)團(tuán)隊(duì)緊密合作,并且精通市場(chǎng)、業(yè)務(wù)與管理。從上升趨勢(shì)來說,可以有三個(gè)層面的路線圖:第一個(gè)層面,要關(guān)注系統(tǒng)思考。在這個(gè)層面,重要的不僅僅是掌握設(shè)計(jì)的知識(shí)點(diǎn),而是更重視分析能力、創(chuàng)新思維能力的提升,需要更廣闊的思路,這方面的空間相當(dāng)非常大。這是第一層面的能力基礎(chǔ)。第二個(gè)層面,要關(guān)注總結(jié)和指導(dǎo),思維空間要轉(zhuǎn)向群體。如何把已有的經(jīng)驗(yàn)總結(jié)出來,并讓這種智力資產(chǎn)真正發(fā)揮作用?成為架構(gòu)師上升第二層面的能力基礎(chǔ)。第三個(gè)層面,要提升自身的全面修養(yǎng)。我們必須引發(fā)自己思維方式的變革,要培養(yǎng)組織力、領(lǐng)導(dǎo)力、創(chuàng)新力以及擁有激情,這是架構(gòu)師上升第三層面的能力基礎(chǔ)。
要看到自身的弱點(diǎn),思路要寬,多思考
架構(gòu)師并不是一個(gè)普通的技術(shù)人員,他對(duì)設(shè)計(jì)站的角度更高,需要的知識(shí)和能力結(jié)構(gòu)更復(fù)雜,他需要具有其他人所沒有的思想、眼光和感知世界的方法,必須突破已有的思維模式和行為模式,突破長期束縛自己的思維瓶頸,才可能達(dá)到自己從未達(dá)到過的高度。
架構(gòu)師要養(yǎng)成每項(xiàng)工作都記錄并分析的好習(xí)慣,以形成更扎實(shí)的工作風(fēng)格。在每個(gè)項(xiàng)目完成都需要進(jìn)行總結(jié)。
3、架構(gòu)師要保持自己的競(jìng)爭(zhēng)力:
架構(gòu)師必須關(guān)注今天的IT技術(shù)、商業(yè)模式變革以及由此引發(fā)的軟件產(chǎn)業(yè)變革的重大趨勢(shì),勤于思考并迎接新的挑戰(zhàn)。一個(gè)人最核心的競(jìng)爭(zhēng)優(yōu)勢(shì)是學(xué)習(xí)能力。架構(gòu)師作為技術(shù)層面資深的一群,為了保持競(jìng)爭(zhēng)力需要注意以下幾個(gè)問題:(1)、保持激情:關(guān)鍵是信念。激情源自于信念,有了信念才會(huì)主動(dòng)挑戰(zhàn)自我,迎接挑戰(zhàn)才會(huì)有激情,有了激情工作才會(huì)更有意思。(2)、創(chuàng)新思考:在工作中多嘗試一些新方法,是維持自我能力的重要手段。(3)、逆向思維:逆向思維指的是使用與正常思路相反的思維方式去分析同一個(gè)問題,使思路多樣化。逆向思維能夠幫助人們沖破傳統(tǒng)思維的束縛,克服慣性思維方式。從反方向考慮問題往往會(huì)取得出人意料的結(jié)果。
4、架構(gòu)師要關(guān)注軟件的新趨勢(shì):
目前傳統(tǒng)軟件危機(jī)暴露出的問題還未真正解決,新的挑戰(zhàn)卻已擺在眼前。在人們不斷思考面臨的挑戰(zhàn)以及對(duì)策中,形成了一些新的趨勢(shì),包括:(1)、軟件質(zhì)量以服務(wù)質(zhì)量形式展現(xiàn),對(duì)質(zhì)量的投資可獲得更高的投資回報(bào)。(2)、軟件過程擴(kuò)展到用戶,希望更多的用戶深入?yún)⑴c到軟件全生命周期。(3)、功能至上遠(yuǎn)遠(yuǎn)不夠,用戶體驗(yàn)得到空前重視。(4)、系統(tǒng)集成模式面臨變革,軟件、服務(wù)、終端、IT基礎(chǔ)設(shè)施將形成更緊密的價(jià)值體系。(5)、研發(fā)要更多關(guān)注非功能性需求,如安全性質(zhì)量、性能、可靠性、可擴(kuò)充性、可伸縮性、可用性等,從而不斷提高軟件的價(jià)值。
知識(shí)就是力量==>信息就是力量
架構(gòu)并不完全是概要設(shè)計(jì)。概要設(shè)計(jì)還是停留在圖紙上,而架構(gòu)必須證明這個(gè)技術(shù)路線可行,并且能夠證明大多數(shù)質(zhì)量風(fēng)險(xiǎn)已經(jīng)得到了解決。
5、所謂設(shè)計(jì)就是解決問題的過程:
軟件設(shè)計(jì)是一種思維活動(dòng),設(shè)計(jì)的魅力在于破解難題,通過直面問題的挑戰(zhàn),以及對(duì)相應(yīng)解決方案的仔細(xì)推敲,才可能設(shè)計(jì)出真正有靈性的產(chǎn)品。(1)、設(shè)計(jì)不具普遍性:軟件設(shè)計(jì)很少具有普通性,不同的目標(biāo)需要不同的設(shè)計(jì)來支持。(2)、做出權(quán)衡:所謂軟件設(shè)計(jì),本質(zhì)上就是在質(zhì)量、成本、時(shí)間以及其它各種因素之間做出權(quán)衡。(3)、記錄設(shè)計(jì)的理由(設(shè)計(jì)文檔)。
多關(guān)注各種方面的架構(gòu)設(shè)計(jì)
6、質(zhì)量屬性決定了架構(gòu)風(fēng)格:
一種架構(gòu)的風(fēng)格,很大程度上與設(shè)計(jì)者如何滿足質(zhì)量要求的對(duì)策有關(guān)。需求的功能和非功能兩方面都可能有質(zhì)量要求。具體歸納如下:(1)、與功能性有關(guān)的質(zhì)量屬性主要包括:A、正確性:是指軟件按照需求正確執(zhí)行任務(wù)的能力。B、健壯性:指的是在異常情況下,軟件能夠正常運(yùn)行的能力。正確性與健壯性的區(qū)別在于,前者是在功能需求之內(nèi)描述問題,后者是在功能需求之外描述問題。健壯性一般有兩層含義:首先是容錯(cuò)能力,其次是恢復(fù)能力。容錯(cuò)指的是發(fā)生異常情況不出錯(cuò)誤的能力,而恢復(fù)指的是軟件發(fā)生錯(cuò)誤以后能恢復(fù)到?jīng)]有發(fā)生錯(cuò)誤錢的狀態(tài)的能力。C、可靠性:是一個(gè)與時(shí)間相關(guān)的屬性,指的是在一定的環(huán)境下,在一定的時(shí)間段,系統(tǒng)不出現(xiàn)故障的概率。通常用平均無故障時(shí)間來衡量。(2)、與非功能性有關(guān)的質(zhì)量屬性主要包括:A、性能:是指軟件的“時(shí)間-空間”效率,而不僅僅是指軟件運(yùn)行速度。換句話說是速度要快而占用資源要少。性能=速度/資源。B、易用性:指的是用戶使用軟件的容易程度。C、清晰性:意味著工作成果易讀、易理解。D、安全性:它的目的是系統(tǒng)應(yīng)該具備防止非法入侵的能力,這既屬于技術(shù)問題也屬于管理問題。E、可擴(kuò)展性:這反映軟件適應(yīng)“變化”的能力,包括需求、設(shè)計(jì)的變化、算法的改進(jìn)和變化。F、可移植性:指的是軟件不經(jīng)修改(或者稍加修改)就可以在不同軟硬件環(huán)境中使用的能力。
7、抵制前期進(jìn)行龐大設(shè)計(jì)的誘惑:
(1)、架構(gòu)應(yīng)該具備易演化特征;(2)、項(xiàng)目開發(fā)周期不要超過6個(gè)月;(3)、分而治之:抓住真正的需求、分而治之(把大項(xiàng)目分成小項(xiàng)目)、設(shè)置優(yōu)先級(jí)、盡快交付;(4)、增量式開發(fā)與交付:如果前期需求比較清楚,可以把一個(gè)大項(xiàng)目分成若干相對(duì)獨(dú)立能夠持續(xù)交付的部分,這樣就可以把大問題分成若干小問題;(5)、迭代式開發(fā)與交付:如果前期需求不是太清楚,項(xiàng)目帶有強(qiáng)烈的創(chuàng)新成分,可以使用具有強(qiáng)迭代的逐步求精的模型。
8、重構(gòu):
在不影響整體外部行為的前提下,不斷地對(duì)軟件進(jìn)行細(xì)微的設(shè)計(jì)改進(jìn),這種漸進(jìn)式的實(shí)踐叫做重構(gòu)。通過重構(gòu)不僅能夠降低維護(hù)成本,而且也為我們提供了改進(jìn)代碼質(zhì)量的通用標(biāo)準(zhǔn),并使我們能迅速添加新功能。從本質(zhì)上說,重構(gòu)根本上就是一個(gè)態(tài)度問題,而不全是技術(shù)問題。
在集中精力完成了代碼邏輯以后,就需要集中精力做第二件事情,那就是重構(gòu)。在對(duì)代碼進(jìn)行重構(gòu)時(shí),我們不會(huì)增加新功能,甚至也不會(huì)去修復(fù)bug。相反,我們會(huì)通過將代碼變得更易于理解來提升代碼的可讀性。
重構(gòu)要堅(jiān)持不懈:(1)重構(gòu)可以加快進(jìn)度;(2)、重構(gòu)應(yīng)該是小步驟地進(jìn)行;(3)、技術(shù)債務(wù)積累越多,重構(gòu)的難度就越大。
9、對(duì)結(jié)構(gòu)進(jìn)行優(yōu)化的基本原則:
在完成了功能邏輯之后,除了代碼重構(gòu)以外,很多情況下還需要重新審視一下軟件結(jié)構(gòu),對(duì)結(jié)構(gòu)進(jìn)行重構(gòu)。良好的結(jié)構(gòu)設(shè)計(jì)需要遵循一些原則,而原則本身就是經(jīng)驗(yàn)的總結(jié)。依據(jù)這些原則,我們就可以在設(shè)計(jì)中有良好的設(shè)計(jì)指向。如需求不變則不需結(jié)構(gòu)。
結(jié)構(gòu)的4條設(shè)計(jì)原則:(1)單一職責(zé)原則(SRP):也被稱之為內(nèi)聚性原則;SRP原則的描述為:就一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因;(2)、開放--封閉原則(OCP):OCP的關(guān)鍵是依賴于抽象。OCP原則的目的,是要求我們?cè)O(shè)計(jì)的軟件實(shí)體(類、組件、函數(shù)等等)應(yīng)該是可以擴(kuò)展的,但是不可修改的。A、對(duì)于擴(kuò)展是開放的:這意味著組件的行為是可以擴(kuò)展的,當(dāng)應(yīng)用的需求改變時(shí),我們可以對(duì)組件進(jìn)行擴(kuò)展,使其具有滿足那些改變的新行為。換句話說我們可以改變組件的功能。B、對(duì)于更改是封閉的:對(duì)組件行為進(jìn)行擴(kuò)展時(shí),不必改動(dòng)組件的源代碼,無論是動(dòng)態(tài)鏈接庫、DLL或者是Java的jar文件都無需改動(dòng)。(3)、依賴倒置原則(DIP):使用傳統(tǒng)的結(jié)構(gòu)化設(shè)計(jì)所創(chuàng)建出來的依賴關(guān)系結(jié)構(gòu),策略是依賴于細(xì)節(jié)的,這是糟糕的,因?yàn)檫@樣會(huì)使策略受到細(xì)節(jié)改變的影響。面向?qū)ο蟮某绦蛟O(shè)計(jì)倒置了依賴關(guān)系結(jié)構(gòu),使得細(xì)節(jié)和策略都依賴于抽象,并且常常是客戶擁有服務(wù)接口。事實(shí)上,這種依賴關(guān)系的倒置正是好的面向?qū)ο笤O(shè)計(jì)的標(biāo)志所在。DIP的原則是:A、高層組件不應(yīng)該依賴于低層組件。二者都應(yīng)該依賴于抽象;B、抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象。(4)、接口隔離原則(ISP):這個(gè)原則用來處理“胖(fat)”接口所具有的缺點(diǎn)。類的“胖”(不內(nèi)聚)接口可以分解成多組方法。每一組方法都服務(wù)于一組不同的客戶程序。這樣,一些客戶程序可以使用一組成員函數(shù),而其它客戶程序可以使用其它組的成員函數(shù)。實(shí)際中當(dāng)然也存在有一些對(duì)象,它們確實(shí)不需要內(nèi)聚的接口,但是ISP建議客戶程序不應(yīng)該看到它們作為單一的類存在。相反,客戶程序看到的應(yīng)該是多個(gè)具有內(nèi)聚接口的抽象基類。
10、關(guān)注變化、關(guān)注特征:
擁抱著變化而設(shè)計(jì)。讓變化成為一個(gè)重要的設(shè)計(jì)要素,需求總是會(huì)發(fā)生變化。面向?qū)ο笫莻(gè)思維方式;诮涌谶M(jìn)行設(shè)計(jì)。
軟件復(fù)用(SoftwareReuse):是將已有軟件的各種有關(guān)知識(shí)用于建立新的軟件,以縮減軟件開發(fā)和維護(hù)的花費(fèi)。軟件復(fù)用是提高軟件生產(chǎn)力和質(zhì)量的一種重要技術(shù)。早期的軟件復(fù)用主要是代碼級(jí)復(fù)用,被復(fù)用的知識(shí)專指程序,后來擴(kuò)大到包括領(lǐng)域知識(shí)、開發(fā)經(jīng)驗(yàn)、設(shè)計(jì)決定、體系結(jié)構(gòu)、需求、設(shè)計(jì)、代碼和文檔等一切有關(guān)方面。
軟件重用,是指在兩次或多次不同的軟件開發(fā)過程中重復(fù)使用相同或相似軟件元素的過程。軟件元素包括程序代碼、測(cè)試用例、設(shè)計(jì)文檔、設(shè)計(jì)過程、需要分析文檔甚至領(lǐng)域知識(shí)。通常,可重用的元素也稱作軟構(gòu)件,可重用的軟構(gòu)件越大,重用的粒度越大。
11、面向服務(wù)的架構(gòu)(Service-OrientedArchitecture, SOA):
面向服務(wù)的架構(gòu)成功的要點(diǎn)是服務(wù)識(shí)別。服務(wù)識(shí)別的基本過程:(1)、了解項(xiàng)目的性質(zhì);(2)、業(yè)務(wù)牽頭,一定不是技術(shù)牽頭;(3)、明確產(chǎn)品的戰(zhàn)略目標(biāo);(4)、研究企業(yè)業(yè)務(wù)流程;(5)、重用行業(yè)制品;(6)、建立契約基線;(7)、完善服務(wù)屬性等級(jí)矩陣(ARMS);(8)、使用業(yè)務(wù)敏捷場(chǎng)景仿真(BASS)進(jìn)行測(cè)試;(9)、擁抱變更。
12、架構(gòu)與框架的區(qū)別:
框架是一個(gè)軟件,但架構(gòu)不是軟件,而是關(guān)于軟件如何設(shè)計(jì)的重要決策。但是在引入軟件框架以后,軟件架構(gòu)決策往往會(huì)體現(xiàn)在框架設(shè)計(jì)之中。不論是架構(gòu)技術(shù)還是框架技術(shù),都是為了解決軟件日益復(fù)雜所帶來的困難,而采取的“分而治之”的結(jié)果。架構(gòu)的思維是先大局后局部,這是一種問題在抽象層面地解決方案,首先考慮大局而忽略細(xì)節(jié)?蚣艿乃季S是先通用后專用,這是一種半成品,還需要通過后期的定制才能成為具體的軟件。
框架和架構(gòu)的關(guān)系可以總結(jié)為兩個(gè)方面:(1)、為了盡早驗(yàn)證架構(gòu)設(shè)計(jì),或者出于支持產(chǎn)品線開發(fā)的目的,可以把通用機(jī)制甚至整個(gè)架構(gòu)以框架方式實(shí)現(xiàn);(2)、企業(yè)可能存在大量可重用框架,這些框架可能已經(jīng)實(shí)現(xiàn)了架構(gòu)所需的重要機(jī)制,或者對(duì)某個(gè)子系統(tǒng)提供了可擴(kuò)展的半成品,最終軟件架構(gòu)可以借助這些框架來構(gòu)造。
框架設(shè)計(jì)最重要的部分,其實(shí)并不在于采用何種技術(shù)方案來實(shí)現(xiàn),而是對(duì)已經(jīng)存在的業(yè)務(wù)過程進(jìn)行深入思考,尋找它們的共性,探究其中的規(guī)律,建立恰當(dāng)?shù)哪J,然后選擇恰當(dāng)?shù)募夹g(shù)實(shí)現(xiàn)方案。
帶團(tuán)隊(duì)關(guān)鍵因素:決心、手段(方法)、激情、信心,技術(shù)不是關(guān)鍵因素。
13、把經(jīng)驗(yàn)歸納總結(jié)成理論:
總結(jié)是兩方面的,(1)總結(jié)過程:歸納出良好設(shè)計(jì)必須遵循的步驟,以及每一步驟的目標(biāo)、解決什么問題、應(yīng)該有什么樣的思考點(diǎn)和思考方向。(2)總結(jié)模式(設(shè)計(jì)模式):模式是一種實(shí)踐經(jīng)驗(yàn)的總結(jié),通過總結(jié)每個(gè)思考點(diǎn)的各種解決方案,并且和過程的節(jié)點(diǎn)裝配在一起,形成能夠指導(dǎo)他人的模式語言。
【如何成為優(yōu)秀的系統(tǒng)架構(gòu)師】相關(guān)文章:
系統(tǒng)架構(gòu)師的就業(yè)前景分析01-11
如何成為超模03-27
系統(tǒng)架構(gòu)師性能知識(shí)整理12-29
如何成為優(yōu)秀的中層管理者03-18