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

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

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

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

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

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

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

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

8 字符串操作

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

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

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

10  尽量多的给方法注释

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

时间: 2024-11-10 05:42:36

改善C#公共程序类库质量的10种方法(转)的相关文章

C 程序提升效率的10种方法

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

改善情绪的10种方法

10 Ways To Improve Your Mood改善情绪的10种方法Everyday productivity and efficiency practically depend on how you feel. More often than not, happy people are more effective at work and have better relationships. Of course, it is normal to be sad every once in

人工智能改进传统云ERP的10种方法

http://blog.itpub.net/31542119/viewspace-2168809/ 随着数字化转型的进程加快,企业开始重新评估ERP的作用.传统ERP经过多年僵硬化定制过于追求生产的一致性,而忽视了客户的需求变化,导致系统缺乏灵活性,已经无法满足当今数字业务模型的增长需求.目前,人工智能(AI).机器学习发展迅速,成为了很多企业的必备帮手,云ERP供应商要想解决传统ERP系统的问题,或许需要这两大王者的帮助! 用更高的智慧和洞察力挽救传统ERP系统 要想新的商业模式取得成功,企业

一篇文章学会页面传值的10种方法(下)

一篇文章学会页面传值的10种方法(下) 6.代理委托实现页面之间的反向传值 这一种方法就是运用协议实现传值,这种方式也是在工程中常用的一种传值方法.首先创建好ViewController和SubViewController,在ViewController中创建好一个展示信息的Label,在SubViewController中创建好一个TextFeild,我们实现在第二个界面点击屏幕时,将TextFeild中的文字传到第一个界面,然后让背景颜色变色. 效果如下: 代理传值.gif 第一步: 首先我

利用 Linux 系统生成随机密码的10种方法

通常情况下大家生成密码都好困惑,一来复杂程度不够会不安全,复杂程度够了又不能手动随便敲击键盘打出一同字符(但通常情况下这些字符是有规律的),使用1password 或者 keepass 这种软件生成也可以,不过貌似1password 要收费,既然这样我们就玩一下好玩的用 linux 来生成随机密码玩玩吧; Linux操作系统的一大优点是对于同样一件事情,你可以使用高达数百种方法来实现它.例如,你可以通过数十种方法来生成随机密码.本文将介绍生成随机密码的十种方法. 1. 使用SHA算法来加密日期,

一篇文章学会页面传值的10种方法(上)

一篇文章学会页面传值的10种方法(上) 1.最简单AB面正向传值 效果如下: 最简单的正向传值.gif 首先我们先创建两个视图控制器ViewController.swift和SubViewController.swift 设置第一个界面 首先在第一个界面创建好一个TextFeild,用来写我们要传的文字 import UIKit class ViewController: UIViewController {     let textField = UITextField()     overr

简单程序的编译链接三种方法(编译多个源文件,静态链接库、动态链接库)

一个程序简单的程序如下: 1 hello.h #ifndef HELLO_H#define HELLO_H void hello(const char *name); #endif 2 hello.c #include <stdio.h>#include <stdlib.h> void hello(const char *name){ printf("hello %s\n",name);} 3 main.c #include <stdio.h>#in

小程序的组件通讯三种方法==子向父传值

小程序的组件通讯三种方法 ============================ ================================ 子向父传值 第一步:小程序子向父传值在父组件定义方法 第二步:小程序子向父传值第二部在使用子组件的标签上在父的wxml文件中把方法传递给子组件 第三步:小程序子向父传值第三步在子组件的js文件中调用this·triggerEvent触发方法同时传递参数给父组件 第四步:第四步在第一步定义好的方法内部通过e·detail来接收子组件传递回来的参数 原

玩转微信营销和推广的10种方法和技巧

[二维码+免费微信WIFI+微信公众号+易企秀+微官网+H5应用页面+凡科互动+分销系统+截图反馈工具+分享有礼+微支付+微信墙/微信大屏+按需的APP] 集文字.语音.视频于一体的微信,正在深刻地改变着我们的社交与生活.当自媒体迅速崛起,微信公众号广泛受宠,微信已拥有7亿用户,微信圈成为人们晒心情.晒活动的社交圈时,媒体营销人蓦然发现,以电视.广播和纸媒为途径的传统传播模式,已经遇到了成长的"天花板",而以微信朋友圈口碑传播为主要表现形式的微信营销,因为拥有了海量用户和实时.充分的互