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