paulwong

          聊聊架構(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

          主站蜘蛛池模板: 桂阳县| 依安县| 桐梓县| 扎赉特旗| 呼玛县| 南安市| 荃湾区| 嵊州市| 衡东县| 留坝县| 威宁| 普兰店市| 罗定市| 西充县| 册亨县| 乌苏市| 维西| 察雅县| 鲁甸县| 湖南省| 城固县| 郴州市| 溧阳市| 太仆寺旗| 台南市| 咸宁市| 海伦市| 隆安县| 余姚市| 油尖旺区| 商城县| 崇礼县| 平和县| 资中县| 宁蒗| 宁武县| 洪江市| 柳江县| 宁强县| 靖边县| 库尔勒市|