在現(xiàn)實(shí)中,我們會(huì)發(fā)現(xiàn)很多從業(yè)人員對(duì)軟件架構(gòu)的認(rèn)知有著明顯的局限和偏差,具體體現(xiàn)在以下幾點(diǎn)。
誤區(qū)一:不知道架構(gòu)與設(shè)計(jì)的區(qū)別
雖然許多從業(yè)人員的頭銜為“架構(gòu)師”,但是他們并不能回答下面的一些問題:
系統(tǒng)架構(gòu)與設(shè)計(jì)有區(qū)別嗎?區(qū)別在哪里呢?
什么樣的人能滿足系統(tǒng)架構(gòu)師的要求?
什么樣的人能滿足設(shè)計(jì)人員的要求?
一般地,架構(gòu)師都是技術(shù)出身,他們可能長期從事過編碼、設(shè)計(jì)領(lǐng)域的工作。很自然,他們可能認(rèn)為設(shè)計(jì)、編碼工作就是軟件架構(gòu)的一切。但是真正的架構(gòu)師必須有長期設(shè)計(jì)的工作經(jīng)驗(yàn),并在系統(tǒng)化的提升之后才可能成為合格的架構(gòu)師。他們需要考慮商業(yè)概念、商業(yè)運(yùn)作、系統(tǒng)結(jié)構(gòu)、結(jié)構(gòu)優(yōu)化等這些更為宏觀的方面,然后選擇那些最經(jīng)典的實(shí)踐參考模型,才能構(gòu)建出合格的軟件架構(gòu)。
誤區(qū)二:不知道系統(tǒng)架構(gòu)該如何做
讓我們回到日常的軟件系統(tǒng)活動(dòng)中來。其實(shí)通過一些實(shí)踐,我們已經(jīng)逐步建立起一些對(duì)軟件架構(gòu)及設(shè)計(jì)活動(dòng)的認(rèn)知。直覺和經(jīng)驗(yàn)告訴我們,一個(gè)軟件系統(tǒng)或軟件架構(gòu)在構(gòu)建之初就給架構(gòu)師留下了充分的創(chuàng)作空間。但是,一個(gè)單純?yōu)榱艘幌盗泄δ艿膶?shí)現(xiàn)而構(gòu)建的架構(gòu),還不能稱作嚴(yán)格意義上的軟件架構(gòu)。一個(gè)真正意義上的軟件架構(gòu),是需要考慮如下的一些系統(tǒng)要求:
好的系統(tǒng),一定是一個(gè)架構(gòu)靈活的系統(tǒng)。
我們需要一個(gè)方便維護(hù)的系統(tǒng)來滿足可維護(hù)性的要求。
當(dāng)系統(tǒng)用戶數(shù)量隨著業(yè)務(wù)的擴(kuò)展而增加,我們的架構(gòu)還能應(yīng)對(duì)。
架構(gòu)設(shè)計(jì)人員能夠確定當(dāng)前運(yùn)行系統(tǒng)的下一個(gè)時(shí)刻的狀態(tài)。
峰值時(shí),系統(tǒng)還能保持運(yùn)行,系統(tǒng)性能不會(huì)明顯下降。
我們的系統(tǒng)能夠與其他系統(tǒng)進(jìn)行集成。
但是許多架構(gòu)師并不知道在系統(tǒng)架構(gòu)構(gòu)建時(shí)期,他們應(yīng)該完整考慮哪些因素,應(yīng)該采用怎樣的手段,應(yīng)該完成什么任務(wù),才能夠構(gòu)建出一個(gè)久經(jīng)考驗(yàn)的系統(tǒng)架構(gòu)。
誤區(qū)三:只盲目追隨業(yè)界通用框架
事實(shí)上,我們在工作中,也許還會(huì)聽到這樣一些聲音:
我們要解決一個(gè)分布式的問題,CORBA很好而且還很標(biāo)準(zhǔn)化,用這個(gè)架構(gòu)就行了。
我們要做一個(gè)電子政務(wù)的應(yīng)用,J2EE框架不就很流行嘛,就選這個(gè)架構(gòu)吧。
我們要做一個(gè)車載電子系統(tǒng)平臺(tái),OSGI就是一個(gè)好的嵌入式平臺(tái),就用它吧。
上述只不過是我們經(jīng)常能見到的一種對(duì)框架或中間件的依賴現(xiàn)象。如果我們每開發(fā)一個(gè)應(yīng)用或產(chǎn)品,都要自己手工設(shè)計(jì)一個(gè)框架,確實(shí)是一件令人痛苦的事。當(dāng)然,我們承認(rèn)現(xiàn)在有很多產(chǎn)品化的、很成熟的框架或中間件,確實(shí)極大方便了我們的應(yīng)用及產(chǎn)品開發(fā)。這似乎給人們一種錯(cuò)覺,以為應(yīng)用和產(chǎn)品開發(fā)是一件很容易的事。但是,我們也要清醒地認(rèn)識(shí)到這些框架或中間件背后實(shí)際上隱藏了很多技術(shù)、設(shè)計(jì)、應(yīng)用場景,也就是說為設(shè)計(jì)開發(fā)人員隱藏了很多系統(tǒng)設(shè)計(jì)開發(fā)的復(fù)雜性。于是當(dāng)產(chǎn)品開發(fā)或項(xiàng)目結(jié)束時(shí),你就可能聽到這樣的抱怨:
我們應(yīng)用CORBA架構(gòu)的系統(tǒng)在運(yùn)行時(shí)速度很慢,而且很復(fù)雜,出了問題卻不知道癥結(jié)在哪里。
我們的J2EE架構(gòu)讓我們使用了大量的EJB和JavaBean,簡直就是構(gòu)件的海洋,太難維護(hù)了。
我們的車載電子系統(tǒng)根本就不工作,打開汽車車門,插入車鑰匙,點(diǎn)火,需要等上幾十秒,電子系統(tǒng)都沒有反應(yīng)。
所以,系統(tǒng)架構(gòu)并不是簡單地應(yīng)用一個(gè)流行的、通用的、看似很唬人的某某通用框架,從而使自己的系統(tǒng)過分地依賴流行的框架或中間件,同時(shí)把所有的系統(tǒng)級(jí)質(zhì)量要求統(tǒng)統(tǒng)扔給這些框架或中間件,以寄希望于這些通用框架代替你去思考和處理你應(yīng)該解決的問題。
實(shí)際上,我們應(yīng)該寄希望于自己來構(gòu)建系統(tǒng)架構(gòu),使其能夠做到:
即便是峰值運(yùn)行時(shí),系統(tǒng)也要有很好的性能。
當(dāng)系統(tǒng)面對(duì)大量并發(fā)事件時(shí),能夠很好地進(jìn)行調(diào)度和并行處理。
當(dāng)系統(tǒng)資源使用頻繁且負(fù)荷增加時(shí),系統(tǒng)能夠很好地協(xié)調(diào)資源的運(yùn)用。
當(dāng)我們設(shè)計(jì)的重要實(shí)時(shí)系統(tǒng)(例如航空管制系統(tǒng))出現(xiàn)錯(cuò)誤時(shí),能快速實(shí)現(xiàn)系統(tǒng)的自我恢復(fù)。
這些都是軟件架構(gòu)及設(shè)計(jì)人員自己應(yīng)該動(dòng)手解決的問題。引用Frederick P在1986年《No Silver Bullets》一文中說過的一句經(jīng)典名言"Silver bullets do not exist",即"世上沒有萬能的解藥"。Frank Buschmann也曾經(jīng)說過"Any framework or middleware can only help you in doing your job, but it cannot do your job for you",即"框架或中間件是用來幫助你的,而不是代替你去思考和工作的"。所以我們必須根據(jù)現(xiàn)實(shí)的系統(tǒng)要求(功能和非功能要求),自己去構(gòu)建適合現(xiàn)狀的軟件架構(gòu)!
誤區(qū)一:不知道架構(gòu)與設(shè)計(jì)的區(qū)別
雖然許多從業(yè)人員的頭銜為“架構(gòu)師”,但是他們并不能回答下面的一些問題:
系統(tǒng)架構(gòu)與設(shè)計(jì)有區(qū)別嗎?區(qū)別在哪里呢?
什么樣的人能滿足系統(tǒng)架構(gòu)師的要求?
什么樣的人能滿足設(shè)計(jì)人員的要求?
一般地,架構(gòu)師都是技術(shù)出身,他們可能長期從事過編碼、設(shè)計(jì)領(lǐng)域的工作。很自然,他們可能認(rèn)為設(shè)計(jì)、編碼工作就是軟件架構(gòu)的一切。但是真正的架構(gòu)師必須有長期設(shè)計(jì)的工作經(jīng)驗(yàn),并在系統(tǒng)化的提升之后才可能成為合格的架構(gòu)師。他們需要考慮商業(yè)概念、商業(yè)運(yùn)作、系統(tǒng)結(jié)構(gòu)、結(jié)構(gòu)優(yōu)化等這些更為宏觀的方面,然后選擇那些最經(jīng)典的實(shí)踐參考模型,才能構(gòu)建出合格的軟件架構(gòu)。
誤區(qū)二:不知道系統(tǒng)架構(gòu)該如何做
讓我們回到日常的軟件系統(tǒng)活動(dòng)中來。其實(shí)通過一些實(shí)踐,我們已經(jīng)逐步建立起一些對(duì)軟件架構(gòu)及設(shè)計(jì)活動(dòng)的認(rèn)知。直覺和經(jīng)驗(yàn)告訴我們,一個(gè)軟件系統(tǒng)或軟件架構(gòu)在構(gòu)建之初就給架構(gòu)師留下了充分的創(chuàng)作空間。但是,一個(gè)單純?yōu)榱艘幌盗泄δ艿膶?shí)現(xiàn)而構(gòu)建的架構(gòu),還不能稱作嚴(yán)格意義上的軟件架構(gòu)。一個(gè)真正意義上的軟件架構(gòu),是需要考慮如下的一些系統(tǒng)要求:
好的系統(tǒng),一定是一個(gè)架構(gòu)靈活的系統(tǒng)。
我們需要一個(gè)方便維護(hù)的系統(tǒng)來滿足可維護(hù)性的要求。
當(dāng)系統(tǒng)用戶數(shù)量隨著業(yè)務(wù)的擴(kuò)展而增加,我們的架構(gòu)還能應(yīng)對(duì)。
架構(gòu)設(shè)計(jì)人員能夠確定當(dāng)前運(yùn)行系統(tǒng)的下一個(gè)時(shí)刻的狀態(tài)。
峰值時(shí),系統(tǒng)還能保持運(yùn)行,系統(tǒng)性能不會(huì)明顯下降。
我們的系統(tǒng)能夠與其他系統(tǒng)進(jìn)行集成。
但是許多架構(gòu)師并不知道在系統(tǒng)架構(gòu)構(gòu)建時(shí)期,他們應(yīng)該完整考慮哪些因素,應(yīng)該采用怎樣的手段,應(yīng)該完成什么任務(wù),才能夠構(gòu)建出一個(gè)久經(jīng)考驗(yàn)的系統(tǒng)架構(gòu)。
誤區(qū)三:只盲目追隨業(yè)界通用框架
事實(shí)上,我們在工作中,也許還會(huì)聽到這樣一些聲音:
我們要解決一個(gè)分布式的問題,CORBA很好而且還很標(biāo)準(zhǔn)化,用這個(gè)架構(gòu)就行了。
我們要做一個(gè)電子政務(wù)的應(yīng)用,J2EE框架不就很流行嘛,就選這個(gè)架構(gòu)吧。
我們要做一個(gè)車載電子系統(tǒng)平臺(tái),OSGI就是一個(gè)好的嵌入式平臺(tái),就用它吧。
上述只不過是我們經(jīng)常能見到的一種對(duì)框架或中間件的依賴現(xiàn)象。如果我們每開發(fā)一個(gè)應(yīng)用或產(chǎn)品,都要自己手工設(shè)計(jì)一個(gè)框架,確實(shí)是一件令人痛苦的事。當(dāng)然,我們承認(rèn)現(xiàn)在有很多產(chǎn)品化的、很成熟的框架或中間件,確實(shí)極大方便了我們的應(yīng)用及產(chǎn)品開發(fā)。這似乎給人們一種錯(cuò)覺,以為應(yīng)用和產(chǎn)品開發(fā)是一件很容易的事。但是,我們也要清醒地認(rèn)識(shí)到這些框架或中間件背后實(shí)際上隱藏了很多技術(shù)、設(shè)計(jì)、應(yīng)用場景,也就是說為設(shè)計(jì)開發(fā)人員隱藏了很多系統(tǒng)設(shè)計(jì)開發(fā)的復(fù)雜性。于是當(dāng)產(chǎn)品開發(fā)或項(xiàng)目結(jié)束時(shí),你就可能聽到這樣的抱怨:
我們應(yīng)用CORBA架構(gòu)的系統(tǒng)在運(yùn)行時(shí)速度很慢,而且很復(fù)雜,出了問題卻不知道癥結(jié)在哪里。
我們的J2EE架構(gòu)讓我們使用了大量的EJB和JavaBean,簡直就是構(gòu)件的海洋,太難維護(hù)了。
我們的車載電子系統(tǒng)根本就不工作,打開汽車車門,插入車鑰匙,點(diǎn)火,需要等上幾十秒,電子系統(tǒng)都沒有反應(yīng)。
所以,系統(tǒng)架構(gòu)并不是簡單地應(yīng)用一個(gè)流行的、通用的、看似很唬人的某某通用框架,從而使自己的系統(tǒng)過分地依賴流行的框架或中間件,同時(shí)把所有的系統(tǒng)級(jí)質(zhì)量要求統(tǒng)統(tǒng)扔給這些框架或中間件,以寄希望于這些通用框架代替你去思考和處理你應(yīng)該解決的問題。
實(shí)際上,我們應(yīng)該寄希望于自己來構(gòu)建系統(tǒng)架構(gòu),使其能夠做到:
即便是峰值運(yùn)行時(shí),系統(tǒng)也要有很好的性能。
當(dāng)系統(tǒng)面對(duì)大量并發(fā)事件時(shí),能夠很好地進(jìn)行調(diào)度和并行處理。
當(dāng)系統(tǒng)資源使用頻繁且負(fù)荷增加時(shí),系統(tǒng)能夠很好地協(xié)調(diào)資源的運(yùn)用。
當(dāng)我們設(shè)計(jì)的重要實(shí)時(shí)系統(tǒng)(例如航空管制系統(tǒng))出現(xiàn)錯(cuò)誤時(shí),能快速實(shí)現(xiàn)系統(tǒng)的自我恢復(fù)。
這些都是軟件架構(gòu)及設(shè)計(jì)人員自己應(yīng)該動(dòng)手解決的問題。引用Frederick P在1986年《No Silver Bullets》一文中說過的一句經(jīng)典名言"Silver bullets do not exist",即"世上沒有萬能的解藥"。Frank Buschmann也曾經(jīng)說過"Any framework or middleware can only help you in doing your job, but it cannot do your job for you",即"框架或中間件是用來幫助你的,而不是代替你去思考和工作的"。所以我們必須根據(jù)現(xiàn)實(shí)的系統(tǒng)要求(功能和非功能要求),自己去構(gòu)建適合現(xiàn)狀的軟件架構(gòu)!

