這本書雖然是講述.net框架設計的一些規范,不過仍然有一些通用的設計準則可以參考
命名規范:
這些只有在用于公開暴露給外界的API時才是必需的
標識符大小寫規則:
1.要把PascalCasing用于由多個單詞構成的名字空間,類型以及成員的名字
2.要把camelCasing用于參數的名字
3.不要把閉合形式的復合詞中每個單詞的首字母大寫,比如 callback, endpoint 等等,可以查閱英語詞典來確定復合詞是不是閉合的
4.不要使用匈牙利命名法。原因有幾點,一是發明它的ms公司都已經明確要求在新的庫在不要使用這種命名法,二是變量名前加類型標識符是個很不好的習慣,在開發過程中有可能會隨時修改這些變量的類型定義,三是新的編輯器中不需要用m_前綴來確定其類型,不過對于內部實現的變量來說,用一個前綴也許會讓變量的查找更方便,比如用一個_前綴
5.不要使用未被廣泛接受的首字母縮寫詞,如何確定某個縮寫詞是否眾所周知有個好方法,到google上搜索一下,如果前幾條都是你所期望的內容,那么它就是眾所周知的了
關于命名:
1.要用名詞或名詞短語來給類和結構體命名,使用PascalCasing的大小寫風格,類名字不要加 C,但是接口前需要加 I,這是個特例
2.用形容詞短語來給接口命名,在少數情況下也可以使用名詞或名詞短語
3.考慮在派生類的末尾使用基類的名字,比如 class FileStream : public Stream
4.用動詞或動詞短語來命名方法,比如 int CompareTo();
5.要用肯定性的短語(CanSeek而不是CantSeek)來命名布爾屬性,可以加Is,Can,Has等前綴,要確保使用時的測試語句讀起來通順,比如
if (collection.Contains(item)) 就比 if (collection.IsContained(item)) 要通順得多
此外,要優先選擇主動語態而不是被動語態,比如
if (stream.CanSeek()) 就比 if (steam.IsSeekable()) 要強得多
6.要用現在時和過去時來賦予事件名以之前和之后的概念,不要用Before或After這樣的前后綴,比如 Closing, Closed而不是AfterClose
使用規范:
1.優先使用集合,避免使用數組
2.考慮使用不規則數組,而不要使用多維數組,也就是優先使用int [][] jagedArray這樣的數組,避免使用 int [,] multiDimArray這樣的類型
3.要用最泛的類型來作為參數類型,大多數以集合為參數的成員都使用IEnumerable<T> 接口