改善C#公用程式類庫品質的10種方法

來源:互聯網
上載者:User

最近重構一套代碼,運用以下幾種方法,供參考。

1  公用方法儘可能的使用緩衝

 public static List<string> GetRegisteredCompany()        {            String sql = "SELECT CompanyCode FROM dbo.Company WHERE Suspended='N' ORDER BY CompanyCode";            DataTable table = SqlHelper.ExecuteDataset(BaseCommon.GetSystemConnectionStringBuilder().ConnectionString, sql).Tables[0];            return (from item in table.AsEnumerable()                    select item.Field<string>("CompanyCode")).ToList();        }

這個方法返回的值,可能會被多個地方用到。應該把這個方法的值緩衝起來,供程式多次使用。

 

2  使用NArrange格式化代碼,這個工具,可以將代碼格式化,用region分隔開來。

NArrange 0.2.9.0
____________________________________________________________
Copyright (C) 2007-2009 James Nies and NArrange contributors.
All rights reserved.
http://www.NArrange.net

Zip functionality courtesy of ic#code (Mike Krueger, John Reilly).

經過格式化之後,如所示,被分成幾個地區,看起來條理更清晰。

 

3  尋找重複的代碼,提取到公用方法庫中。

關於尋找程式中重複的代碼,有如下工具可以檢測重複的代碼

1) Simian   http://www.harukizaemon.com/simian/

2)  Team City  http://www.jetbrains.com/teamcity/

3) Resharper plugin  AgentRalph  http://agentralphplugin.googlecode.com/

4)  DevExpress CodeRush

5)  Resharper  Find Similar Code 尋找相似的代碼

6) CCFinder 

7)  Duplo  http://sourceforge.net/projects/duplo/

8) Visual Studio 2012

9) Clone Detective for Visual Studio   http://www.codeplex.com/CloneDetectiveVS

10) Atomiq    http://getatomiq.com 

11)  NDepend  http://www.ndepend.com/

12)  CloneDR  http://www.semanticdesigns.com/Products/Clone

工具相當多,如果使用VS2012開發,已經內建此功能。

 

4 增加測試代碼,測試各種情況下公用代碼的功能是否正確。

[TestMethod]public void EmpLicenseTestMethod()        {            DateTime expired=new DateTime(2013,12,1);            string licensee = "Administrator";            string company="Microsoft Corporation";            string license=GenerateLicense(expired, licensee, company);            //儲存許可檔案            XmlDocument doc = new XmlDocument();            doc.LoadXml(license);            SaveFileDialog dlg = new SaveFileDialog();            dlg.RestoreDirectory = true;            dlg.Filter = "License file (*.lic)|*.lic|All files (*.*)|*.* ";            if (dlg.ShowDialog() == DialogResult.OK)            {                doc.Save(dlg.FileName);            }}
 

Visual Studio內建的Test工具與技術,再配合Resharper的工具,測試一個方法相當容易實現。

 

5  應用改善效率的代碼替換不合適的代碼,或是應用.NET架構的方法重寫自訂的方法。

效率改善代碼,如下舉例

1  不要用string ax=”” 判斷ax是否為空白, ax.Length==0的效率高於ax==string.Emptyu 一般用as.IsNullorEmpty
2  對於不改變的變數,用常量代替
3  用Linq代替大量的foreach查詢
4  MyType t=(MyType) t和t as MyType的效率比較,後者效率好,而且轉換失敗後不會拋出異常
5  List<T> 代替Array ,Haset<T> ,Dictionary<K,V> 代替Hashtable

.NET的內建的方法,string.Join可以將字串數組串連成由一個分隔字元號串連的一個字串。比如

例如,如果 separator 為“,”且 value 的元素為“apple”、“orange”、“grape”和“pear”,則 Join(separator, value) 返回“apple, orange, grape, pear”。

如果 separator 為 nullNothingnullptrnull 引用(在 Visual Basic 中為 Nothing),則改用Null 字元串 (Empty)。

這個方法,我們常常自己實現。應該改用.NET內建的方法。

6  使用並行技術改善系統效率

Parallel.ForEach可以充分利用多核的,提供系統效能。對於一些不需要考慮對資料的前後順序操作的地方,均可以用這個方法改善。比如刪除臨時檔案。對於需要考慮操作順序的資料,比如清空資料表資料,要先清除子表,再刪除主表,否則會引起外鍵衝突。應當用lock鎖定要刪除的資料表,提取出資料後,再進行刪除。

 

7  使用Linq和Lambda運算式改善系統的寫法

對於只有幾行的方法,可以用Lambda來替代。如果方法很通用,可以寫成通用的方法。對DataTable的迴圈遍曆操作,首選Linq技術,可減少出錯的機率,也使代碼簡化。

8 字串操作

簡單的操作不改變,複雜的匹配與尋找改用Regex,同時要考慮Encoding的問題。

9 公用方法的提取與擴充方法

static類型的公用方法如果過多,因為GC無法回收記憶體,會影響系統的效率。可以考慮用擴充方法替代,編譯時間直接被替換為原始類型的靜態方法調用。一般添加擴充方法的類型為.NET系統類別型,自訂的類型添加擴充方法很少。

 

10  盡量多的給方法注釋

使用vsDocman工具,儘可能的為公用方法書寫注釋,添加用例

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.