軟件設(shè)計之道-簡潔

1. 軟件設(shè)計目標(biāo)

<strong>幫助其它人</strong>,做與軟件相關(guān)的決策時,指導(dǎo)法則就是判斷能夠提供什么樣的幫助。一個人寫出優(yōu)秀軟件的能力,完全取決于他在多大程度上理解了“幫助其它人”的思想。

  1. 確保軟件能夠提盡可能多的幫助;
  2. 確保軟件能夠持續(xù)提供盡可能多的幫助;
  3. 設(shè)計程序員能盡可能容易開發(fā)和維護的軟件系統(tǒng),這樣的系統(tǒng)才能為用戶提供盡可能多的幫助,而且能持續(xù)提供盡可能多的幫助;

2. 關(guān)于未來

1.相比降低實現(xiàn)成本,降低維護成本更加重要
2.設(shè)計質(zhì)量的好壞,正比于該系統(tǒng)未來能持續(xù)幫助他人時間的長度
通俗點就是,如果你的軟件只能在未來幾小時內(nèi)提供幫助,就不需要花太多的功夫去設(shè)計,如果需要在未來10年內(nèi)都能派上用場,就需要花很多精力去設(shè)計。
3.所以,軟件設(shè)計時最關(guān)注的應(yīng)該是未來。但是,未來的某些事情,是我們所不知道的。程序員犯的最常見也是最嚴(yán)重的錯誤,就是在其實不知道未來的情況下去預(yù)測未來。
在軟件設(shè)計時,可以根據(jù)已知的信息去做某些決策,目的是為了創(chuàng)造更好的未來(提升價值、降低維護成本),而不必預(yù)測未來究竟發(fā)生什么具體的事情。

3. 關(guān)于變化

程序存在的時間越久,它的某個部分需要變化的可能性就越高;
關(guān)鍵在于,我們并不需要去預(yù)測有什么變化 ,我們知道的是,變化必然會發(fā)生,程序應(yīng)該<strong>保證盡可能合理的靈活性</strong>。
回預(yù)某個特定文件修改歷史,問問自己,最初寫這個文件時,你能預(yù)測到這些變化嗎?是否一開始寫好就能夠減輕后期的工作量??偟膩碚f,就是嘗試?yán)斫饷看涡薷?,看看能否從中得到一些關(guān)于軟件開發(fā)的新收獲。

軟件設(shè)計三大誤區(qū)

  1. 編寫不必要的代碼
    不要編寫不需要的代碼,并且要刪除沒有用到的代碼。
  2. 代碼難以修改(僵化設(shè)計)
* 對未來做太多假設(shè)
* 不仔細(xì)設(shè)計就開始編碼
* 設(shè)計程序時,應(yīng)當(dāng)根據(jù)現(xiàn)在知道的確切的需求,而不是我們認(rèn)為未來會出現(xiàn)的需求。
  1. 過分追求通用;
    • 僅僅根據(jù)目前確知的需求來考慮通用
    • 如果設(shè)計讓事情變復(fù)雜而不是變簡單,就是在做過度工程

漸進式設(shè)計
漸進式開發(fā)

4. 缺陷和設(shè)計

最好的設(shè)計,就是能適應(yīng)外界盡可能多的變化,而軟件自身的變化要盡可能的少

  1. 永遠(yuǎn)不要"修正"任何東西,除非它真是一個問題,而且有證據(jù)表明問題確實存在;
  1. 避免重復(fù)
    理想情況下,任何系統(tǒng)里的任何信息,都應(yīng)當(dāng)只存在一次或只存在一個地方;讓各處的代碼可以“使用Use”、“調(diào)用Call”、“包含Include”已有的其它代碼;

5. 簡潔

軟件的任何一部分越簡單,維護難度越小,成本越低。
簡潔是指某部分的代碼,而不是指整個系統(tǒng)。

  1. 簡潔是相對的
  1. 簡潔到什么程度?傻子也能看懂
  2. 保持一致
    如果在一個地方采取了某種規(guī)則,就應(yīng)當(dāng)在其它每個地方都遵守這種規(guī)則,如變量命名方式等。
  3. 可讀性
    • 空白:字符、代碼行之間留有合適的空白
    • 命名:名字應(yīng)該足夠長,能完整表達其意義或描述其功能,但不能太長影響閱讀
    • 注釋:程序簡單的不能再簡單的時候,再添加注釋

6. 復(fù)雜性

以下情況會增加復(fù)雜性:

  • 擴展軟件的用途:應(yīng)當(dāng)絕對禁止這樣做
  • 新增程序員: 除非是高高手
  • 做無謂的改變:需求變化、設(shè)計變化、代碼變化等,謹(jǐn)慎決策
  • 困于糟糕的技術(shù):先前采用的技術(shù)不能靈活地適應(yīng)未來的需求
  • 理解錯誤:越不理解自己的工作,就越容易設(shè)計出復(fù)雜的系統(tǒng)
  • 糟糕的設(shè)計或不做設(shè)計:指的是“沒有為變化做設(shè)計
  • 重新發(fā)明輪子:不要什么都自力更生,使用成熟的輪子

復(fù)雜性及錯誤的解決辦法

需要反問的問題是:真正要解決的問題是什么?

  • 問題復(fù)雜
    解法不一定復(fù)雜;大多數(shù)麻煩的設(shè)計問題,都可以用在紙上畫圖或?qū)懗鰜淼霓k法中找到答案。
  • 應(yīng)對復(fù)雜性
  • 如果系統(tǒng)中某個部分太過復(fù)雜,有個好辦法可以解決:把它分解成幾個獨立的小部分,逐步重新設(shè)計;每次修改都應(yīng)該足夠小,這樣可以放心動手,不會讓事情變得更復(fù)雜。
  • 如果遇到不可解決的復(fù)雜性,在程序外面妥善包裝上一層,讓其它程序員更容易理解和使用

7. 測試

測試法則:

  • 對軟件行為的了解程度,等于真正測試它的程度。測試程度包括:軟件有多個方面曾經(jīng)測試過,上次測試是多久以前,在多少不同的環(huán)境下經(jīng)過測試等。
  • 必須保證測試是準(zhǔn)確的,它的行為完全符合預(yù)期,測試結(jié)果必須有效。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 文章來自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鵬閱讀 9,371評論 2 126
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,176評論 25 708
  • 1.測試與軟件模型 軟件開發(fā)生命周期模型指的是軟件開發(fā)全過程、活動和任務(wù)的結(jié)構(gòu)性框架。軟件項目的開發(fā)包括:需求、設(shè)...
    Mr希靈閱讀 22,409評論 7 278
  • 這是我下定決心要寫的第一個完整的故事,從人物的限定,場景的構(gòu)造,時代和背景都是架空全新萌生的。由于故事我將它定在了...
    相思不惘閱讀 331評論 0 1
  • 想回家,怯回家,每次回老家心里都有那么幾分傷感,這就是鄉(xiāng)愁。 十一妹妹結(jié)婚,一大家子從各地趕到西安參加婚禮,完了舉...
    厚臉皮的魚閱讀 262評論 0 0

友情鏈接更多精彩內(nèi)容