原创 建議123:程序集不必與命名空間同名

建議123:程序集不必與命名空間同名 程序集一般會和命名空間同名,但這並不是必須的。事實上,不同名的命名空間和程序集是很常見的。 程序集表示的是一種物理上的分組,而命名空間是邏輯上的分組,兩者沒有必然聯繫。 當然,如果項目最終會被

原创 建議125:避免用FCL的類型名稱命名自己的類型

建議125:避免用FCL的類型名稱命名自己的類型 試想過自己寫一個Socket類型嗎?如果沒有,我們來嘗試一下: public class Socket { //省略 } 把以上代碼同某些其他工具類封裝到某個dll裏,讓

原创 建議124:考慮在命名空間中使用複數

建議124:考慮在命名空間中使用複數 如果有一組功能相近的類型被分到了同一個命名空間下,可以考慮爲命名空間使用複數。 最典型的例子有,在FCL中,我們需要把所有的非泛型集合類集中在一起存放,所以就有了System.Collectio

原创 建議128:考慮讓派生類的名字以基類名字作爲後綴

建議128:考慮讓派生類的名字以基類名字作爲後綴 派生類的名字可以考慮以基類名字作爲後綴。這帶來的好處是,從類型的名字上我們就知道它包含在哪一個繼承體系中。 Exception及其子類就是這樣一個典型的例子。所有的異常都應該繼承自S

原创 建議119:不要使用自己的加密算法

建議119:不要使用自己的加密算法 很多人認爲自己寫的加密算法纔是安全的,因爲該算法只有“自己知道”。很遺憾,這是大錯特錯。 首先,我們不是祕密學專家,如果我們隨隨便便寫個算法就稱得上是加密算法的話,那麼世界上就不會存在“密碼學”這

原创 建議121:爲應用程序設定運行權限

建議121:爲應用程序設定運行權限 在某些情況下,可能存在這樣的需求:只有系統管理員才能訪問某應用程序的若干功能。這個時候,可以結合.NET中提供的代碼訪問安全性(Code Access Security)和基於角色(Role-Bas

原创 建議129:泛型類型參數要以T作爲前綴

建議129:泛型類型參數要以T作爲前綴 作爲一種約定,泛型類型的參數要以T作爲前綴。如委託聲明: Action<T1,T2> 其中,泛型類型參數名不應該處理成: Action<Arg1,Arg2> 當然,這僅僅是一種習慣,若果

原创 建議120:爲程序集指定強名稱

建議120:爲程序集指定強名稱 雖然強名稱在設計之初有防止被未授權的第三方軟件非法執行程序的作用,但是因爲它的破解方法並不難,所以現在強名稱更多的意義在於它可以避免出現“DLL HELL”現象。  “DLL HELL”是指多個應用程

原创 建議127:用形容詞組給接口命名

建議127:用形容詞組給接口命名 接口規範的是“Can do”,也就是說,它規範的是類型可以具有哪些行爲。所以,接口的命名應該是一個形容詞,如: IDisposable表示可以被釋放 IEnumerable表示類型含有Items,

原创 建議137:委託和事件類型應添加上級後綴

建議137:委託和事件類型應添加上級後綴 委託類型本身是一個類,考慮讓派生類的名字以基類名字作爲後綴。事件類型是一類特殊的委託,所以事件類型也遵循本建議。 委託和事件的正確的命名方式有: public delegate

原创 建議136:優先使用後綴表示已有類型的新版本

建議136:優先使用後綴表示已有類型的新版本  加後綴在某些情況下是很奇怪的形式,我們都不願意看到OrderProcessor2這樣的類型。但是,有的時候仍舊有必要這樣做。最典型的是FCL中關於數字證書操作的X509Certifica

原创 建議131:用PascalCasing命名公開元素

建議131:用PascalCasing命名公開元素 開放給調用者的屬性、字段和方法都應該採用PascalCasing命名方法,比如: class Person { public string Fir

原创 建議122:以.爲命名空間命名

建議122:以<Company>.<Component>爲命名空間命名 建議以<Company>.<Component>爲程序集命名,比如Microsoft.Windows.Design。這有助於唯一地標識我們的命名空間。 另外一種

原创 MVC實現僞靜態

1  什麼是僞靜態? 現在很多門戶網站或者各大電商平臺的網站的鏈接最後都是.htm或者.htm結尾,那麼他們的網頁真的是靜態的html嗎?拿京東來說,有無數個頁面都都Html,在商品每時每刻都可能被更新的情況下,那是不是要有專門的人員來修

原创 建議126:用名詞和名詞組給類型命名

建議126:用名詞和名詞組給類型命名 類型對應着現實世界中的實際對象。對象在語言中意味着它是一個名詞。所以,類型也應該以名詞或名詞詞組去命名。 類型定義了屬性和行爲。雖然它包含行爲,但不是行爲本身。所以,下面的一些命名對於類型來說是