zoukankan      html  css  js  c++  java
  • 改善C#公共程序类库质量的10种方法(转)

    出处:http://www.cnblogs.com/JamesLi2015/p/3140897.html

    最近重构一套代码,运用以下几种方法,供参考。

    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).

    image

    经过格式化之后,如上图所示,被分成几个区域,看起来条理更清晰。

    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

    image

    5)  Resharper  Find Similar Code 查找相似的代码

    image

    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),则改用空字符串 (Empty)。

    这个方法,我们常常自己实现。应该改用.NET内置的方法。


    6  使用并行技术改善系统效率

    Parallel.ForEach可以充分利用多核的,提供系统性能。对于一些不需要考虑对数据的前后顺序操作的地方,均可以用这个方法改善。比如删除临时文件。对于需要考虑操作顺序的数据,比如清空数据表数据,要先清除子表,再删除主表,否则会引起外键冲突。应当用lock锁定要删除的数据表,提取出数据后,再进行删除。

    7  使用Linq和Lambda表达式改善系统的写法

    对于只有几行的方法,可以用Lambda来替代。如果方法很通用,可以写成通用的方法。对DataTable的循环遍历操作,首选Linq技术,可减少出错的机率,也使代码简化。

    8 字符串操作

    简单的操作不改变,复杂的匹配与查找改用正则表达式,同时要考虑Encoding的问题。

    9 公共方法的提取与扩展方法

    static类型的公共方法如果过多,因为GC无法回收内存,会影响系统的效率。可以考虑用扩展方法替代,编译时直接被替换为原始类型的静态方法调用。一般添加扩展方法的类型为.NET系统类型,自定义的类型添加扩展方法很少。

    10  尽量多的给方法注释

    使用vsDocman工具,尽可能的为公共方法书写注释,添加用例

    image

  • 相关阅读:
    java_oop_方法2
    POJ 3276 Face The Right Way(反转)
    POJ 3276 Face The Right Way(反转)
    POJ 2566 Bound Found(尺取法,前缀和)
    POJ 2566 Bound Found(尺取法,前缀和)
    POJ 3320 Jessica's Reading Problem(尺取法)
    POJ 3320 Jessica's Reading Problem(尺取法)
    POJ 3061 Subsequence(尺取法)
    POJ 3061 Subsequence(尺取法)
    HDU 1222 Wolf and Rabbit(欧几里得)
  • 原文地址:https://www.cnblogs.com/smileberry/p/4056265.html
Copyright © 2011-2022 走看看