1. 編碼原則 1.1. SOLID原則 1.1.1. 單一職責原則(Single Respon-sibility Principle) 1.1.1.1. 類和方法應當僅具備單一職責。所有組合為單一職責的元素應當組合在一起併進行封裝。 1.1.2. 開閉原則(Open-Closed Principl ...
1. 編碼原則
1.1. SOLID原則
-
1.1.1. 單一職責原則(Single Respon-sibility Principle)
-
1.1.1.1. 類和方法應當僅具備單一職責。所有組合為單一職責的元素應當組合在一起併進行封裝。
-
1.1.2. 開閉原則(Open-Closed Principle)
-
1.1.2.1. 類和方法應當對擴展開放,對修改封閉。
-
1.1.3. 里氏替換原則(Liskov Substitution)
-
1.1.3.1. 若函數接收一個基類的指針,那麼該指針應當可以替換為任何從基類派生的類(的指針)而無須事先知曉具體類信息。
-
1.1.4. 介面隔離原則(Interface Segregation Principle)
-
1.1.4.1. 與其設計一個大而全的介面不如拆分為若幹小型介面,而類可以選擇實現需要的介面中的方法。
-
1.1.5. 依賴倒置原則(Dependency Inversion Principle)
-
1.1.5.1. 高層次的模塊不應當依賴低層次的模塊。
-
1.1.5.2. 低層次的模塊的替換不應當影響高層次模塊的使用。
-
1.1.5.3. 不論是高層次的模塊還是低層次的模塊都應當依賴於抽象。
-
1.1.5.4. 抽象不應當依賴於細節,但是細節應當依賴於抽象。
1.2. YAGNI原則
-
1.2.1. “你不會需要它”(You Ain't Gonna Need It)
-
1.2.2. 確保類、方法和整體代碼行數保持絕對最小水平。
1.3. KISS原則
-
1.3.1. “保持軟體簡單易懂”(Keep It Simple,Stupid)
-
1.3.2. 務必要保持代碼整潔易讀,確保即使是新手程式員也能夠理解其含義。
1.4. DRY原則
-
1.4.1. “避免重覆的代碼”(Don't Repeat Yourself)
-
1.4.2. 當遇到重覆代碼時應當儘早將其移除
1.5. 奧卡姆剃刀法則
-
1.5.1. Occam's Razor, Ockham's Razor
-
1.5.2. “如無必要,勿增實體”,即“簡單有效原理”。
-
1.5.2.1. 最簡單的方案也最可能是正確的那個方案
-
1.5.2.2. 假設越多,設計方案包含缺陷的可能性就越大
-
1.5.2.3. 項目的構成組件越少,出問題的可能性就越少
2. 編碼方法
2.1. 測試驅動開發(Test-Driven Development,TDD)
2.2. 行為驅動開發(Behavioral-Driven Development,BDD)
- 2.2.1. SpecFlow
2.3. 面向方面編程(Aspect-Oriented Programming,AOP)
- 2.3.1. PostSharp
3. 良好代碼
3.1. 合理的縮進
- 3.1.1. 工具實現
3.2. 有意義的註釋
3.3. API文檔註釋
- 3.3.1. 文檔越易用,開發人員使用API的意願就越強
3.4. 使用命名空間合理組織代碼
- 3.4.1. 使用命名空間合理組織代碼
3.5. 合理的命名規則
-
3.5.1. Pascal命名法
-
3.5.1.1. 命名空間、類、介面、枚舉和方法
-
3.5.2. 駝峰命名法
-
3.5.2.1. 變數名稱、參數名稱
-
3.5.3. 在成員變數上必須加上首碼下劃線
3.6. 一個類執行一種任務
3.7. 一個方法做一件事情
3.8. 方法的代碼少於10行,最好不超過4行
- 3.8.1. 代碼格式化、鏈式函數算1行?
3.9. 方法的參數不多於兩個
-
3.9.1. 方法最好沒有參數
-
3.9.2. 有兩個以上的參數時就需要考慮類和方法的職責是不是太多了
-
3.9.3. 方法的確需要兩個以上的參數,那麼最好將其合併為一個對象參數
3.10. 合理使用異常
3.11. 代碼可讀性強
3.12. 代碼耦合程度低
3.13. 高內聚的代碼
- 3.13.1. 將公共的功能正確地分組的代碼具有高度的內聚性
3.14. 對象會被恰當銷毀
-
3.14.1. 請務必調用Dispose()方法明確地銷毀使用中的資源
-
3.14.2. 將對象(引用)設置為null以使其超出作用範圍
-
3.14.3. using語句
3.15. 避免使用Finalize()方法
- 3.15.1. 最好在更加可靠的Dispose()方法中來銷毀非托管資源
3.16. 合理地進行抽象
- 3.16.1. 當設計只向更高的級別開放,並僅開放必需的內容時,它就處在正確的抽象層次上