聊聊架構(gòu)
什么是系統(tǒng)架構(gòu)?從字面上理解,系統(tǒng)架構(gòu)是系統(tǒng)的框架結(jié)構(gòu),是系統(tǒng)進(jìn)行抽象之后的一個(gè)草圖。它包含了系統(tǒng)中各個(gè)抽象組件的協(xié)作方式。
為什么需要架構(gòu)?
好的架構(gòu)能夠降低系統(tǒng)的創(chuàng)造和維護(hù)成本,特別是維護(hù)成本。一個(gè)系統(tǒng)的創(chuàng)造成本低,而維護(hù)的成本大,特別是互聯(lián)網(wǎng)應(yīng)用,一般情況下把一個(gè)系統(tǒng)搞上線只需要一個(gè)月,但是有的系統(tǒng)搞下線缺需要幾個(gè)月,而維護(hù)則需要數(shù)年。好的設(shè)計(jì)師不會(huì)在系統(tǒng)上線后對系統(tǒng)進(jìn)行大的修改,從而減少系統(tǒng)的維護(hù)成本。
如果區(qū)分創(chuàng)造和維護(hù)兩個(gè)階段的話,架構(gòu)師分為系統(tǒng)架構(gòu)師和維護(hù)架構(gòu)師,架構(gòu)新的系統(tǒng)的是系統(tǒng)架構(gòu)師,而維護(hù)老系統(tǒng)的則是維護(hù)架構(gòu)師,程序員大多數(shù)愿意做新系統(tǒng)不愿意維護(hù)老系統(tǒng),因?yàn)楦杏X沒什么技術(shù)含量,但是維護(hù)老的系統(tǒng)反而更難,因?yàn)槔舷到y(tǒng)的重構(gòu)和改進(jìn)更加復(fù)雜,維護(hù)架構(gòu)師不僅需要讀懂老系統(tǒng)架構(gòu)設(shè)計(jì),還要在不影響老系統(tǒng)功能的情況下,進(jìn)行功能新增和重構(gòu)。我的一位同事在對一個(gè)舊的系統(tǒng)進(jìn)行重構(gòu)之前,讀了幾個(gè)星期的代碼,然后才開始設(shè)計(jì)改進(jìn)方案。
架構(gòu)設(shè)計(jì)的目標(biāo)
設(shè)計(jì)的目標(biāo)圍繞著降低成本這個(gè)需求進(jìn)行。設(shè)計(jì)的目標(biāo)非常多,不同的系統(tǒng)架構(gòu)目標(biāo)也不一致,但是我覺得比較重要的架構(gòu)目標(biāo)有以下幾個(gè),可擴(kuò)展性,靈活性和可插入性。
可擴(kuò)展性,新的功能容易加入到系統(tǒng)里,降低創(chuàng)造成本。
靈活性,一處修改不會(huì)波及其他的地方,降低維護(hù)成本。
可插入性,同樣的功能可方便的替換,降低創(chuàng)造和維護(hù)成本。
那么如何實(shí)現(xiàn)這三個(gè)目標(biāo)
提高可擴(kuò)展性:把不易變的抽象出來。抽象層要比實(shí)現(xiàn)層要更穩(wěn)定,抽象層的變化要少。把變化的集中起來,比如把容易變化的功能放在單獨(dú)一個(gè)系統(tǒng)或者一個(gè)模塊里。
靈活性:模塊化,每個(gè)模塊相互獨(dú)立,減少模塊之間的藕合度,修改不會(huì)互相傳遞。
提高可插入性:模塊化,服務(wù)化。
如何開始架構(gòu)
當(dāng)一塊新業(yè)務(wù)放在你面前時(shí),如何進(jìn)行系統(tǒng)架構(gòu)?我覺得需要進(jìn)行以下幾個(gè)步驟的思考:
業(yè)務(wù)分析:輸出業(yè)務(wù)架構(gòu)圖,這個(gè)系統(tǒng)里有多少個(gè)業(yè)務(wù)模塊,從前臺用戶到底層一共有多少層。
系統(tǒng)劃分:根據(jù)業(yè)務(wù)架構(gòu)圖輸出系統(tǒng)架構(gòu)圖,需要思考的是這塊業(yè)務(wù)劃分成多少個(gè)系統(tǒng),可能一個(gè)系統(tǒng)能支持多個(gè)業(yè)務(wù)。基于什么原則將一個(gè)系統(tǒng)拆分成多個(gè)系統(tǒng)?又基于什么原則將兩個(gè)系統(tǒng)合并成一個(gè)系統(tǒng)?
系統(tǒng)分層:系統(tǒng)是幾層架構(gòu),基于什么原則將一個(gè)系統(tǒng)進(jìn)行分層,分成多少層?
模塊化:系統(tǒng)里有多少個(gè)模塊,哪些需要模塊化?基于什么原則將一類代碼變成一個(gè)模塊。
posted on 2014-11-28 23:06 paulwong 閱讀(338) 評論(0) 編輯 收藏 所屬分類: SOFTWARE ARCHITECTURE