代碼整潔之道摘要

整潔代碼

  • 勒布朗法則:Later equals never.
  • 不要以爲你會回過頭再去修改因爲各種原因而製造的混亂代碼,混亂的代碼最終會導致生產力的下降
  • 整潔代碼不要重複代碼,提高表達力,只做一件事,小規模抽象

有意義的命名

函數

  • 函數儘量保證短小,只做一件事,並且擁有自頂向下的閱讀順序(即:讓每個函數後面都跟着位於下一抽象層級的函數)
  • 函數參數儘量少,參數不易對付,帶有太多概念性
  • 面向對象編程原則(SOLID):
    1. 單一功能原則,每個類中的功能平行沒有依賴
    2. 開閉原則,開放拓展,封閉修改,梅耶開閉原則提倡實現繼承,多態開閉原則相比提倡對抽象基類的繼承
    3. 里氏替換原則,派生類(子類)對象可以在程式中代替其基類(超類)對象
    4. 接口隔離原則,提供小而具體的接口,使系統解開耦合
    5. 依賴反轉原則
      • 高層次的模塊不應該依賴於低層次的模塊,兩者都應該依賴於抽象接口
      • 抽象接口不應該依賴於具體實現,而具體實現則應該依賴於抽象接口

註釋

  • 註釋的恰當用法是彌補我們在用代碼表達意圖遭遇的失敗

格式

  • 保持良好的代碼風格,代碼風格關乎溝通
  • 關係密切的概念應該互相靠近
  • 變量聲明應儘可能的靠近其使用的位置
  • 若某個函數調用了另一個,應該放在一起,並且調用者儘可能放在被調用者上面

對象與數據結構

  • 對象暴露行爲,隱藏數據,便於添加新對象類型而無需修改既有行爲,同時也難以在既有對象中添加新行爲;數據結構暴露數據,沒有明顯的行爲,便於向既有數據結構添加新行爲,同時也難以向既有函數添加新數據結構

錯誤處理

  • 拋出的異常應當提供足夠的環境說明,以便判斷錯誤的來源和處所

單元測試

  • 測試驅動開發,測試代碼和生產代碼一樣重要,應該保持整潔
  • 遵循F.I.R.S.T規則
    1. Fast
    2. Independent
    3. Repeatable
    4. Self-Validating
    5. Timely

  • 類應該短小,通過權責衡量類的大小
  • 單一權責原則認爲,類或模塊應有且只有一條加以修改的理由
  • 保持內聚性

系統

  • 系統起始過程與起始之後的運行邏輯應當分離開

併發編程

  • 併發編程執行模式
  1. 生產者消費者模型(生產者與消費者之間的隊列是一種限定資源)
  2. 讀者作者模型(平衡兩者線程需求,實現正確操作,提供合理吞吐量,避免線程捱餓)
  3. 宴席哲學家(進程競爭資源問題,會造成死鎖、活鎖、吞吐量、效率降低等問題)
  • 關於同步(即加鎖)
  1. 加鎖來確保只有一個進程執行,代價是昂貴的,會造成延遲和額外開銷;
  2. 另外注意保護臨界區,通過擴展臨界區來保證同步,會造成資源競爭效率低下等問題,因此,儘可能減少同步區域
  3. 儘早考慮關閉問題,不要把系統錯誤歸咎於偶發事件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章