我們聊聊如何培養(yǎng)架構(gòu)思維?你學(xué)會(huì)了嗎?
一提到架構(gòu),很多程序員可能會(huì)立刻心生敬畏,覺(jué)得這是一件很高端、很難且極具挑戰(zhàn)的事情。然而,與編程相比,架構(gòu)更多地關(guān)注宏觀層面。雖然架構(gòu)確實(shí)存在一些挑戰(zhàn),但在某些時(shí)候,架構(gòu)的 “世界” 在復(fù)雜度上可能還不如編碼中的細(xì)枝末節(jié)那么大。所有程序員都應(yīng)盡可能早地培養(yǎng)自己的架構(gòu)思維。即便你未來(lái)不從事架構(gòu)相關(guān)工作,但擁有架構(gòu)思維能極大地開拓你的視野,助力你在技術(shù)道路上走得更遠(yuǎn)。
在了解具體的架構(gòu)思維培養(yǎng)方法之前,需先明確架構(gòu)的意義究竟是什么。簡(jiǎn)單來(lái)說(shuō),架構(gòu)表達(dá)的是一種關(guān)系,即多個(gè)現(xiàn)實(shí)元素之間的關(guān)系。這里有兩個(gè)關(guān)鍵詞:關(guān)系和現(xiàn)實(shí)。其中,“關(guān)系” 很好理解,指的是不同事物之間以何種形式共存。而 “現(xiàn)實(shí)” 卻常常容易被人忽視,因?yàn)樗@得很平常。但是,在做架構(gòu)時(shí),如果對(duì)某些現(xiàn)實(shí)的定義不精準(zhǔn),那么后續(xù)的工作大概率也是錯(cuò)誤的。所以,要做好架構(gòu),第一步就是先明確當(dāng)前要解決的問(wèn)題或要達(dá)成的目標(biāo),并弄清楚其中涉及的相關(guān)概念所表達(dá)的業(yè)務(wù)含義。你可以將這一步中得到的相關(guān)概念用工具或者紙筆畫出來(lái),平鋪開來(lái)即可。
圖片
做完這一步,接下來(lái)就是傳統(tǒng)意義上做架構(gòu)的過(guò)程。對(duì)于這個(gè)過(guò)程,可以用一句話來(lái)概括:架構(gòu)的過(guò)程其實(shí)就是建模的過(guò)程。所謂建模,就是進(jìn)一步細(xì)化當(dāng)前的事物,并基于所得信息做相關(guān)的延展和規(guī)劃,循序漸進(jìn),得到一個(gè)完整的、可執(zhí)行的方案的過(guò)程。
說(shuō)起來(lái)容易,做起來(lái)卻并不輕松。在架構(gòu)的過(guò)程中,會(huì)涉及到分解、集成、復(fù)用、分層、抽象、結(jié)構(gòu)化以及迭代等方面。具體該怎么做呢?可以參考以下 5 個(gè)步驟。
第一步:搞清楚要解決的現(xiàn)實(shí)問(wèn)題。
當(dāng)拿到一個(gè)稍具規(guī)模的功能后,需先弄清楚這個(gè)功能要解決的問(wèn)題是什么,不要一上來(lái)就寫代碼或者找現(xiàn)成的解決方案??偸且罉赢嫼J的話,很難培養(yǎng)出自己的架構(gòu)思維。
第二步:確定邊界。
要考慮問(wèn)題所在的場(chǎng)景中有哪些輸入數(shù)據(jù),最終輸出的又是什么,這樣就把問(wèn)題的邊界給定下來(lái)了。
第三步:用分解、抽象、結(jié)構(gòu)化的思維來(lái)拆分問(wèn)題,并梳理好每個(gè)流程。
把問(wèn)題進(jìn)行拆解,看看解決了哪些小問(wèn)題之后,這個(gè)大問(wèn)題就能被解決。然后,思考每一個(gè)小問(wèn)題是否有解決方案。如果有,可以把中間的邏輯用流程圖畫出來(lái)。如果邏輯太復(fù)雜,那就說(shuō)明設(shè)置的問(wèn)題顆粒度還是太大,繼續(xù)拆。如果某個(gè)小問(wèn)題沒(méi)有解決方案,同樣繼續(xù)拆,直到有解決方案為止。
第四步:借助集成、復(fù)用、分層思維給出最合理的技術(shù)實(shí)現(xiàn)方案,形成最終一份完整的架構(gòu)。
根據(jù)自己的技術(shù)儲(chǔ)備,針對(duì)每一個(gè)問(wèn)題給出具體的技術(shù)實(shí)現(xiàn)方案,選擇最簡(jiǎn)單、高效的一個(gè)。然后把所有問(wèn)題的解決方案放在一起看,提煉可復(fù)用的部分出來(lái),并考慮用什么形式進(jìn)行封裝。可以是一個(gè)簡(jiǎn)單的庫(kù),也可以是一個(gè)完整的框架,或是 API 等等。
第五步:根據(jù)對(duì)未來(lái)的預(yù)判對(duì)架構(gòu)方案進(jìn)行局部修正,直到合理。
根據(jù)自己對(duì)業(yè)務(wù)的理解,和與產(chǎn)品經(jīng)理、業(yè)務(wù)方的溝通,預(yù)判一下后續(xù)可能的擴(kuò)展點(diǎn),看當(dāng)前的設(shè)計(jì)是否能滿足。如果不能滿足,就逐級(jí)逆向倒推父問(wèn)題,直到找到與這個(gè)新的擴(kuò)展點(diǎn)相關(guān)的根問(wèn)題,停下來(lái)把這個(gè)根問(wèn)題下面的子問(wèn)題全部重新設(shè)計(jì)一下。然后再重復(fù)第四步,直到得到一個(gè)當(dāng)下看起來(lái)完全滿足預(yù)期的方案。
圖片
整個(gè)流程下來(lái),就完成了一次架構(gòu)設(shè)計(jì)工作,這些工作可以幫助你培養(yǎng)自己的架構(gòu)思維。等慢慢熟練之后,也可以根據(jù)實(shí)際情況自行刪減一些步驟。