工作之余經常會收藏一些.NET開發中應用到的軟件,這些工具涵蓋設計,調試,構建,測試等領域。有這些工具的幫助,在處理一些開發中遇到的問題時,會輕松很多。
1 Reflection 反射 .NET Reflector
這個反編譯工具確實相當的重要。且不說用來干壞事,就是經常用來檢查自己設計的程序集的命名,也是很有益處的。命名空間是否合理,類型命名是否合理。
以我的經驗,反編譯自己寫的程序集,常常會出現一些自己沒有預料到的命名空間。比如我們在Visual Studio中新增一個類型或是窗體時,它會根據當前項所處的路徑來添加完整的命名空間,所以,編譯完成后,我還是會用這個工具,檢查一下程序集的命名空間的定義。另外一條經驗是,不要使用相當的類型名稱,即使它們放在不同的命名空間中,也不要讓類型命名與系統的命名相同,雖然系統的命名更能表達類型的含義,也不應該這樣做。
曾經有一個項目,把重寫的控件命名為Button,Lable,TextBox,結果為了屏蔽System.Windows.Forms中的同樣名稱的控件,耗費了很多精力。如果我的ERP叫Flex ERP,我可以把重寫的Button命名為FlexButton,這樣會給以后的編譯帶來很多方便。
2 Test 測試 NUnit 或 Visual Studio Test
依據代碼的性質,單元測試在代碼開發中的作用略有不同。框架開發人員,需要測試框架方法的可用性,靈活性,經常需要寫出一些測試代碼,並將這些代碼交給應用程序員,讓他們熟悉框架的用法。對於應用程序員,我偏重於把Test項目作為一個代碼的收藏工具,在網上遇到的好代碼,我會將它保存到單元測試項目中,以備下次使用。
對於這二個工具,我偏重於后者。Visual Studio Test可以用來調試代碼。有時候並不一定想看到最后的測試結果是綠色紅色,我需要的是,對方法流程的把握。雖然調試測試方法有點不切實際,但是我常常這樣做。比如Linq to Xml中,經常弄錯了節點與節電之間的相互引用,於是開發一個Test項目,再放調試器打開,邊寫邊調。調試器也可以用來協助寫代碼。
3 Improvement 代碼分析 NDepend
基於源代碼級別的代碼分析,統計,可用來改善代碼質量。比如我要查找程序中,以Do開頭方法,並且有15個參數的,它顯示結果如下所示
此外,它還可以檢測到無用的代碼(常常是方法中return語句之后),字段需要封裝。如果一個方法過長,它也可以檢查出來,提醒你改善此代碼。如果是程序集編譯之后的代碼檢驗,可以使用FoxCop,它以程序集為檢測單元。而NDepend以構建程序集的源代碼為檢測單元,我以為后者更有借鑒意義。
4 Environment simulate 環境模擬Virtual PC/VMWare Workstation/Virtual BOX
CPU硬件技術向多核發展,帶來更快的處理速度。有時要模擬客戶電腦中遇到的問題,可借助於虛擬技術。Windows Server 2008之后的版本,直接內置了虛擬機技術。Windows 7則要安裝虛擬機,比如Virual PC或是VMWare Workstation,或是Virtual Box。
Mircrosoft Virtual PC發展到2007后不再更新,所以我更偏向於VMWare的虛擬機,強大靈活。
5 Text Handle 文本處理 RegexBuddy Expresso RegexTester
當涉及到文本相關的內容時,應當選取一個稱手的正則表達式工具,借助於正則表達式,靈活又強大。
簡單的可以用字符串解析,IndexOf配合Substring解決問題,復雜一些則需要用正則表達式,處理相對於靈活一些。
比如下面的代碼,為了讀取配置項中的主機地址和端口,格式像這樣 127.0.0.1/2908
Match reportServerUriMatch = Regex.Match("127.0.0.1/2908", "(?<host>[^/\r\n]+):(?<port>[0-9]*)", RegexOptions.IgnoreCase | RegexOptions.Singleline); if (reportServerUriMatch.Success) { string serviceHost = reportServerUriMatch.Groups["host"].Value; int servicePort = Convert.ToInt32(reportServerUriMatch.Groups["port"].Value); }
6 Language 語言類 LinqPad /Snippet Compiler
Linq to SQL雖然逐漸被大眾遺忘也不再更新。但是Linq to Object,Linq to Xml還是相當有用的技術。Linq to Object能大大的減少foreach式的代碼。
在C# 2.0時代,為了把讀取數組中長度大於等於4的字符串,需要做一次循環,而在Linq中,只需要一行代碼即可做到。
string[] names = { "Tom", "Dick", "Harry" }; IEnumerable<string> filteredNames = System.Linq.Enumerable.Where (names, n => n.Length >= 4); foreach (string n in filteredNames) Console.Write (n + "|"); // Dick|Harry|
LinqPad是Linq類型工具中最優秀的一個,用於快速構建Linq語法表達式。
本系列中的另一個工具Snippet Compile可用來幫助編寫.NET代碼片段,可以直接運行代碼片段,並且可以調試。
7 Refactor 重構 ReSharper
JetBrain出品的ReSharper是此類工具中最優秀的一員,幾乎找不到比它更優秀的同類性質的工具。
在代碼編寫過程中,ReSharper能幫助你發現大量的問題,並提示你修改。這個工具完全替代Visual Studio本身的重構工具。Visual Studio的功能雖然強大,但是有的地方,也還不足夠好,Resharper的目的很明確。就是加忚你編寫代碼癿速度,規范你的代碼。面向開發人員,Resharper 提供以下6個核心功能,分別是:
1. 代碼分析(Code Analysis):智能提示代碼中存在的問題和修復建議。
2. 編碼助手(Coding Assistance):智能提示自動完成功能。
3. 代碼生成(Code Generation):自動生成屬性,構造函數,實現接口,覆蓋基類成員,代理成員等
4. 代碼清理(Code Cleanup): 重新組織代碼,並且能夠消除代碼冗余,以及成員間的排序
5. 導航查找(Navigation and Search)
6. 重構(Refactorings)