以前做過(guò)一個(gè)產(chǎn)品,共分為三層:平臺(tái)層,應(yīng)用服務(wù)器層,應(yīng)用層。其中有一個(gè)業(yè)務(wù)流程,實(shí)現(xiàn)是在應(yīng)用層,但它那里的信息不全,需要通過(guò)應(yīng)用服務(wù)器層向平臺(tái)層獲取必要的業(yè)務(wù)數(shù)據(jù),然后通過(guò)應(yīng)用服務(wù)器層控制業(yè)務(wù)流程。當(dāng)時(shí)考慮這個(gè)結(jié)構(gòu)的時(shí)候,主要的出發(fā)點(diǎn)就是業(yè)務(wù)和控制分離,將業(yè)務(wù)處理從平臺(tái)層剝離開(kāi)來(lái)。當(dāng)時(shí),在具體是實(shí)施過(guò)程中,我們工程師對(duì)這種結(jié)構(gòu)抵觸心理很強(qiáng)烈。他認(rèn)為我們的業(yè)務(wù)開(kāi)發(fā)非常的繁瑣,而且經(jīng)常要貼“狗皮膏藥”。
先拋開(kāi)上面這個(gè)實(shí)例的設(shè)計(jì)思路,這里面反映出一個(gè)問(wèn)題:軟件開(kāi)發(fā)過(guò)程中,軟件體系結(jié)構(gòu)同樣需要“重構(gòu)”。
結(jié)合經(jīng)典的《重構(gòu)》,這里簡(jiǎn)單的寫(xiě)一下軟件體系結(jié)構(gòu)重構(gòu)的定義,原因,設(shè)計(jì),方法。僅作拋磚引玉,希望能和大家一起思考。
何謂重構(gòu)
對(duì)軟件體系結(jié)構(gòu)的一種調(diào)整,目的是在不改變其“外在行為”的前提下,調(diào)整其結(jié)構(gòu),使其易于修改,維護(hù)和理解。
為何重構(gòu)
1、使整個(gè)系統(tǒng)易于添加新的功能。為系統(tǒng)添加新功能將會(huì)非常的容易。
2、調(diào)整系統(tǒng)中各個(gè)模塊的功能,角色,使整個(gè)系統(tǒng)更容易理解。
何時(shí)重構(gòu)
由于系統(tǒng)結(jié)構(gòu)的重構(gòu)成本非常高,所以要選擇一個(gè)合適的重構(gòu)時(shí)機(jī)。
1、為系統(tǒng)添加功能時(shí)重構(gòu)。此時(shí)項(xiàng)目進(jìn)度壓力如果非常大,這放棄此時(shí)重構(gòu)。
2、軟件第一個(gè)版本開(kāi)發(fā)完畢后重構(gòu)。在第一個(gè)版本開(kāi)發(fā)完畢,第二個(gè)版本開(kāi)發(fā)之前,根據(jù)第一個(gè)版本的開(kāi)發(fā)經(jīng)驗(yàn),對(duì)系統(tǒng)進(jìn)行重構(gòu)。
3、開(kāi)發(fā)出系統(tǒng)原型時(shí)進(jìn)行重構(gòu)。開(kāi)發(fā)出一個(gè)系統(tǒng)的原型的時(shí)候,如果發(fā)現(xiàn)系統(tǒng)需要重構(gòu),這及時(shí)的進(jìn)行,這個(gè)時(shí)候重構(gòu)成本較低,但對(duì)是否重構(gòu)決策要求較高。
重構(gòu)的必要條件
重構(gòu)之前必須為軟件系統(tǒng)建立一個(gè)可靠的、自動(dòng)化的功能測(cè)試環(huán)境,這樣才能有效防止重構(gòu)帶來(lái)的危害。好的測(cè)試時(shí)重構(gòu)的根本。重構(gòu)之前,首先檢查自己是否有一套可靠的測(cè)試機(jī)制。這些測(cè)試必須有自我檢驗(yàn)(selfchecking)能力。
重構(gòu)與設(shè)計(jì)
系統(tǒng)架構(gòu)層次的重構(gòu),因?yàn)橹貥?gòu)的成本相對(duì)較高,所以預(yù)先設(shè)計(jì)的程度要相對(duì)較深,要盡量考慮系統(tǒng)可能遇到的情況,方案要適當(dāng)?shù)撵`活和強(qiáng)固。盡量減少系統(tǒng)結(jié)構(gòu)的重構(gòu)。
軟件體系結(jié)構(gòu)的重和代碼的重構(gòu)的區(qū)別
1、針對(duì)的層次不同:一個(gè)是系統(tǒng)結(jié)構(gòu)層次的,一個(gè)是代碼層次的。
2、重構(gòu)成本不同,系統(tǒng)結(jié)構(gòu)的重構(gòu)成本相對(duì)較高。
3、是否重構(gòu)的決策者不同。
4、重構(gòu)的時(shí)機(jī)不同。