架構(gòu)師在團(tuán)隊(duì)里面的角色很獨(dú)特。他們不是項(xiàng)目經(jīng)理,卻確定著何時(shí)以及如何交付軟件。他們不是產(chǎn)品經(jīng)理,卻要確保軟件能夠滿足業(yè)務(wù)目標(biāo)。他們也編程,但做得更多的是架構(gòu)設(shè)計(jì),而不僅僅是寫算法和代碼。架構(gòu)師是軟件開發(fā)的核心角色,肩負(fù)著與眾不同的職責(zé)。
大多數(shù)架構(gòu)師都是技術(shù)出身,會編程、能設(shè)計(jì)高效的算法、懂測試和部署軟件,這些都是架構(gòu)師必備的技能,但要從程序員成長為架構(gòu)師,還需要承擔(dān)一些新的職責(zé)。
定義問題
軟件架構(gòu)設(shè)計(jì)是一門以人為本的學(xué)科。軟件的所有利益相關(guān)方都有著自己對項(xiàng)目的預(yù)期,因此架構(gòu)師要與產(chǎn)品經(jīng)理、項(xiàng)目經(jīng)理一起協(xié)作,共同定義軟件項(xiàng)目的需求與目標(biāo)。
許多團(tuán)隊(duì)是由產(chǎn)品經(jīng)理定義功能特性。功能需求當(dāng)然很重要,但是架構(gòu)師更關(guān)注質(zhì)量屬性。除了定義系統(tǒng)的質(zhì)量屬性,架構(gòu)師還要密切關(guān)注那些影響架構(gòu)設(shè)計(jì)方向的約束和特性。
在定義問題的同時(shí)考慮架構(gòu),才能確保開發(fā)出大家都滿意的系統(tǒng)。
拆解系統(tǒng),分配職責(zé)
架構(gòu)師只有把軟件系統(tǒng)進(jìn)行分解,才能制定出滿足質(zhì)量屬性和其他系統(tǒng)需求的策略。例如,可以指定一個(gè)組件實(shí)現(xiàn)用戶注冊功能,指定另一個(gè)組件負(fù)責(zé)識別貓的圖片;這樣可以分配不同的團(tuán)隊(duì)開發(fā)不同的模塊;從而將數(shù)據(jù)讀取部分從數(shù)據(jù)寫入部分剝離出來,使得軟件系統(tǒng)具備更高的可靠性、可用性、可伸縮性。
分解系統(tǒng)的重要性還不僅僅體現(xiàn)在上述方面。小對象往往更容易推演、測試、設(shè)計(jì)。當(dāng)然,將系統(tǒng)打散之后,要確保能把它們組裝回去,協(xié)同工作。
縱觀全局
所有軟件系統(tǒng)都存在于客觀世界的大背景下,比如與之交互的用戶、開發(fā)團(tuán)隊(duì),硬件平臺,甚至包括最初的開發(fā)目的,理想情況下,軟件架構(gòu)應(yīng)該能與外圍環(huán)境和諧共生。
從全局角度考慮整體系統(tǒng)意味著架構(gòu)師需要處理的不僅僅是技術(shù)問題。人員、過程、業(yè)務(wù)需求以及其他技術(shù)和非技術(shù)因素都將影響最后的軟件系統(tǒng)。即便是一個(gè)小小的設(shè)計(jì)決策也可能產(chǎn)生深遠(yuǎn)的影響。架構(gòu)師必須高瞻遠(yuǎn)矚、縱觀全局,而不能只著眼于局部細(xì)節(jié)的設(shè)計(jì)。
軟件設(shè)計(jì)是一個(gè)不斷“掙扎”的過程,在想要達(dá)成的目標(biāo)與必須接受的現(xiàn)實(shí)之間尋找平衡。這意味著必須深思熟慮并做出取舍。
學(xué)會取舍
假設(shè)客戶要求軟件具備高可用性,能夠響應(yīng)99.9%的請求。我們可以引入冗余元素來提高可用性。這樣設(shè)計(jì)倒是簡單,但有一個(gè)問題:必須采購雙倍的硬件,從而成本也翻倍了。這樣做就是用更高的成本換取高可用性。
放棄一些東西換取其他東西,這在軟件開發(fā)中很常見。架構(gòu)師要找出備選方案,再與各方一起協(xié)商如何取舍最合理。
軟件系統(tǒng)的分解和切割也不一定那么“干凈利落”。這就需要折中,也可能會犯錯誤。在開發(fā)系統(tǒng)的過程中,還會不斷給架構(gòu)引入技術(shù)債務(wù)。
管理技術(shù)債務(wù)
所有的軟件都有技術(shù)債務(wù)。架構(gòu)師知道系統(tǒng)是如何分解的,他們關(guān)注大局,指導(dǎo)劃分出來的各個(gè)模塊協(xié)調(diào)工作,還要將業(yè)務(wù)需求與技術(shù)決策放在一起考慮。只有這樣,架構(gòu)師才能游刃有余地管理技術(shù)債務(wù)。
技術(shù)債務(wù)如同一條鴻溝,一邊是當(dāng)前的軟件系統(tǒng)設(shè)計(jì),另一邊是你想要的、能持續(xù)產(chǎn)生價(jià)值的設(shè)計(jì)。技術(shù)債務(wù)的多少可以通過填平鴻溝所需的代價(jià)衡量。技術(shù)債務(wù)就像是軟件系統(tǒng)的副產(chǎn)品。出色的軟件開發(fā)團(tuán)隊(duì)會有意引入技術(shù)債務(wù)來實(shí)現(xiàn)更快的交付,后續(xù)再逐步地進(jìn)行償還,從而持續(xù)地創(chuàng)造價(jià)值。
架構(gòu)師應(yīng)該指明技術(shù)債務(wù),幫助利益相關(guān)方?jīng)Q定采取何種措施管理它們。
提升團(tuán)隊(duì)的架構(gòu)技能
架構(gòu)師是整個(gè)團(tuán)隊(duì)的導(dǎo)師和顧問。設(shè)計(jì)炫酷卻無人理解的架構(gòu)毫無意義。作為團(tuán)隊(duì)的架構(gòu)專家,有責(zé)任向團(tuán)隊(duì)分享知識,讓他們成功地開發(fā)出軟件。
架構(gòu)師應(yīng)該適時(shí)地傳授設(shè)計(jì)技巧和架構(gòu)理念。為了傳道,可以與組員結(jié)對設(shè)計(jì),可以寫文檔授業(yè)、解惑,還可以提出建設(shè)性地批評。把架構(gòu)設(shè)計(jì)當(dāng)做一項(xiàng)社交活動,讓團(tuán)隊(duì)成員都參與到設(shè)計(jì)過程中來,這是最有效地提升團(tuán)隊(duì)架構(gòu)技能的方法。技能的提升對于團(tuán)隊(duì)的成敗將起到?jīng)Q定性的作用。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。