軟件設(shè)計是一種抽象活動,設(shè)計所要實現(xiàn)的是產(chǎn)出代碼。就這一點來說,任何人都會設(shè)計。但是,正如我們?nèi)粘I钪兴勀慷没蛴H身經(jīng)歷,設(shè)計有優(yōu)劣之分。
從項目管理的角度去理解,設(shè)計是為了滿足涉眾(Stakeholders)的需求。顯然,一個設(shè)計應(yīng)該滿足客戶對系統(tǒng)的功能及非功能需求。但單是滿足了這一點,并不能稱為一個好的設(shè)計。因為開發(fā)者同樣屬于涉眾!而開發(fā)者的需求又是怎樣的呢?至少,應(yīng)該有以下幾條吧:
- 老板希望軟件交付后,不應(yīng)該有很高的維護(hù)成本。如果開發(fā)人員為了維護(hù)而經(jīng)常出差或者加班且久久不能投入新項目,顯然,換了誰是老板都不愿意這種事情發(fā)生。
- 開發(fā)人員呢?誰愿意放棄和家人朋友而拼死拼活在單位加班,總是有這么多麻煩事纏著你,煩不煩哪!
- ……等等
所以,設(shè)計應(yīng)該盡可能多地照顧到維護(hù)和變更。
為了兼顧各戶滿意和維護(hù)成本,設(shè)計應(yīng)該不斷挑戰(zhàn)其終極目標(biāo)——松耦合。不管是XP或UP,這個目標(biāo)都不會改變。OO設(shè)計中的五大原則,其根本目的就是降低組件間的耦合度,避免牽一發(fā)則動全身的現(xiàn)象發(fā)生。降低耦合度不僅能夠提高軟件內(nèi)在的質(zhì)量,還能大大減少不必要的編譯時間、減少向版本控制系統(tǒng)提交源碼的網(wǎng)絡(luò)開銷……
如何鑒別設(shè)計的這一指標(biāo)?軟件工程中有專用的度量:CBO(Coupling Between Objects),那是由公式計算出來的,也有很多工具支持,值得一試。(聽過幾次李維先生的講座,他經(jīng)常拿Together的度量功能炫耀^_^)
但是,作為一個開發(fā)人員,對手中的代碼應(yīng)該有適當(dāng)?shù)拿舾行浴.吘梗@些代碼是你親手創(chuàng)造的,誰不希望自己的作品得到眾人的贊許?或許能換得一次加薪升職的機會^_^ 退一步,這可關(guān)系到寶貴的休息時間啊。所以,開發(fā)者應(yīng)該對自己的產(chǎn)品有這樣一種意識:及時修正設(shè)計中不合理的地方。
敏捷過程告訴我們:在代碼“有味道”的時候進(jìn)行重構(gòu)。“有味道”是代碼正在變質(zhì)的標(biāo)志,很遺憾,能夠使代碼保持原味的防腐劑還沒發(fā)明。為了保證代碼質(zhì)量,及時重構(gòu)是必要的。這就像在燒烤的時候為了防止烤焦,你得坐在爐子前經(jīng)常翻動肉塊一樣。
如何聞出代碼的味道?認(rèn)真學(xué)習(xí)一下OO吧,別以為OO很簡單,就是繼承+封裝+多態(tài),誰都會。即使是書中記述的五大原則,想要運用自如,也得多感覺感覺才行。很多時候,我們不知不覺就把蛆蟲放進(jìn)了代碼中……
好了,下一篇:OO五大原則