在軟件開發(fā)方面,架構(gòu)設(shè)計(jì)的作用不可諱言。中培偉業(yè)《軟件系統(tǒng)詳細(xì)設(shè)計(jì)最佳實(shí)踐》培訓(xùn)專家張老師指出,在傳統(tǒng)開發(fā)方法中,架構(gòu)設(shè)計(jì)是圍繞著設(shè)計(jì)文檔展開的。具體實(shí)施過程有如下特點(diǎn):
l 預(yù)先設(shè)計(jì)。在實(shí)際開發(fā)工作開始前,少數(shù)架構(gòu)師們需要用相當(dāng)長的一段時(shí)間來進(jìn)行架構(gòu)設(shè)計(jì)和詳細(xì)設(shè)計(jì),力求得到一個(gè)具有高度可擴(kuò)展性的良好架構(gòu)。產(chǎn)出為“概要設(shè)計(jì)文檔”和“詳細(xì)設(shè)計(jì)文檔”。根據(jù)項(xiàng)目規(guī)模,這個(gè)過程一般持續(xù)數(shù)周、數(shù)月甚至數(shù)年不等
l 短暫評估。架構(gòu)師產(chǎn)出的設(shè)計(jì)文檔要經(jīng)過架構(gòu)設(shè)計(jì)評審委員會(huì)或類似組織的評審,這個(gè)過程一般持續(xù)數(shù)天
l 依據(jù)設(shè)計(jì)進(jìn)行實(shí)現(xiàn)。經(jīng)過評審的設(shè)計(jì)會(huì)交到開發(fā)者手中,進(jìn)行實(shí)際的編程實(shí)現(xiàn),這個(gè)過程往往以數(shù)月,甚至數(shù)年來計(jì)算。
思考傳統(tǒng)架構(gòu)設(shè)計(jì)方法,我們不禁要提出這樣的問題:
為什么傳統(tǒng)開發(fā)方法會(huì)如此重視前期預(yù)先架構(gòu)設(shè)計(jì),以至于希望在實(shí)際開發(fā)前把架構(gòu)設(shè)計(jì)做到盡善盡美?
答案在于,在傳統(tǒng)的概念中,一旦設(shè)計(jì)成型,架構(gòu)是很難調(diào)整的。例如,傳統(tǒng)的軟件工程教科書中都會(huì)討論“架構(gòu)調(diào)整的成本”問題:如果在設(shè)計(jì)中實(shí)現(xiàn)一次修改的成本為1;在實(shí)現(xiàn)過程中相同修改的成本就是5~10;在測試、部署階段,同樣的修改成本將上升到50~100;維護(hù)階段同樣修改的成本更是成指數(shù)曲線上升。
這種策略存在一個(gè)根本問題:軟件的“擴(kuò)展”究竟會(huì)如何發(fā)生是很難預(yù)計(jì)的。面對這一困境,傳統(tǒng)開發(fā)方法的解決方案是繼續(xù)增加預(yù)先設(shè)計(jì)的時(shí)間和人力,但往往收效甚微。
傳統(tǒng)設(shè)計(jì)困境分析
傳統(tǒng)預(yù)先設(shè)計(jì)方法惡性循環(huán)的原因有三點(diǎn),對應(yīng)上述實(shí)施過程的特點(diǎn):
l 設(shè)計(jì)和實(shí)現(xiàn)脫節(jié)。設(shè)計(jì)評審團(tuán)專家一般不參與實(shí)際的軟件開發(fā)。基于經(jīng)驗(yàn)的設(shè)計(jì)一方面無法得到實(shí)現(xiàn)的驗(yàn)證;另一方面,當(dāng)需求發(fā)生變更時(shí),無法隨之演進(jìn)。
l 評估的可靠性有限。對預(yù)先設(shè)計(jì)評估的只能基于已知的需求,而系統(tǒng)的可擴(kuò)展性是在應(yīng)對變更的需求時(shí)體現(xiàn)出來的,因此評估具有很大的局限性
l 實(shí)現(xiàn)者缺少對預(yù)先設(shè)計(jì)進(jìn)行修改的支持。當(dāng)預(yù)先設(shè)計(jì)不能滿足實(shí)際需求時(shí),開發(fā)者或者修改設(shè)計(jì),或者置需求變更不理,繼續(xù)沿預(yù)先設(shè)計(jì)開發(fā)。忽視需求變更的結(jié)果只能是系統(tǒng)無法滿足應(yīng)用(而開發(fā)者也可以將責(zé)任推到架構(gòu)師身上);如果開發(fā)者根據(jù)需求修改設(shè)計(jì),則預(yù)先設(shè)計(jì)不但事實(shí)上已經(jīng)成為浪費(fèi),而且已有的設(shè)計(jì)和實(shí)現(xiàn)往往更成會(huì)增加修改的難度。原因在于,如果預(yù)先設(shè)計(jì)的擴(kuò)展性沒有用到,則這些額外的擴(kuò)展性帶來的對當(dāng)前需求無用的復(fù)雜性,這些復(fù)雜性增加了理解、修改系統(tǒng)的難度。