【进阶修炼】——改善C#程序质量(9)
140,使用默认的访问修饰符。
如果不加访问修饰符,成员变量的默认是private的,类默认是internal的。为了明确访问的权限,我倒是建议都加上访问修饰符,这省不了多少代码。
141,不知道该不该加大括号的时候就加上。
大括号会多占用两行代码,到底一行语句的代码需不需要加大括号这是一个争论。但是为了避免引入不必要的bug还是加上吧。
142,总是提供有意义的命名。
我们不希望看到如iTemp的命名,类似于i的命名只应该出现在循环中。变量的命名应尽可能表达它应该表达的意思,不要太随意的命名,这会给代码维护制造困难。如果你不想维护糟糕的代码,那就从自己做起吧。
143,方法的抽象级别应该在同一层次上。
如:void LocalInit(){ RemoteInit();} void RemoteInit(){},LocalInit和RemoteInit应该是同一级别的,不应存在调用关系。可以做如下改进,void Init(){LocalInit();RemoteInit();},现在它们的层次就一样了。
144,一个方法只做一件事。
这往往可以从方法的名字上判定方法是不是做了太多的事情,如果是,则考虑拆分成两个方法。
145,避免过长的方法和类。
方法的长度以前曾有人提过控制在50行,甚至更短的30行,这没有一个硬性的要求,原则就是要适合于阅读,我们一般以不超过显示器的一屏为佳。类的长度尽量在300行以内,如太大了可以考虑重构。
146,只对外公开必要的操作。
不要把所有的方法都设定为public,这会增加我们筛选方法的难度,同时也不建议曝露不必要的成员,不公开的成员就显示的设定为private是个好习惯。尽管默认也是private的。
147,重构多个相关属性为一个类。
这一步不是一上来就做的,而是重构的时候发现相关属性超过3个,就可以考虑提取了。
148,不重复代码。
重复代码给维护带来工作量和风险,修改了一处,而另一处没有得到修改。消除重复就能解决这个问题。
149, 使用表驱动法避免过长的if和switch分支。
如基于索引的表驱动,string[] chineseWeek = new string[] { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" }; return chineseWeek[(int)w];
150, 使用匿名方法,Lambda表达式代替方法。
过小的函数体,如3行左右,可以考虑用Lambda表达式来进行简化。 超过3行以上的,可以提取成单独的方法,更利于阅读。
151, 使用事件访问器替换公开的事件成员变量。
public event ColumnClickEventHandler ColumnClick { add { this.Events.AddHandler(this, value); } remove { this.Events.RemoveHandler(this, value); }},上面这段代码比public event ColumnClickEventHandler ColumnClick;有更好的灵活性,可以在add和remove中添加额外的逻辑。如果没有额外的逻辑控制,这样实现就显得多余,大多数情况都可以用后者。
152, 最少,最好不要写注释。
当所有的命名都能表达代码意图时,注释是多余的。如果功力不够,还是建议适量添加注释,至少要重构你代码的人也得看得懂你写的代码。
153, 如果代码抛出异常,则应该给出注释。
注释应该是xml,使用者通过查阅生成的帮助文档就知道要处理怎样的异常。
154, 不要过度设计,在敏捷中体会重构的乐趣。
155, 应该随生产代码一起提交测试代码。
写单体测试代码是必须的,时刻保持代码测试通过,我们才敢放心大胆的进行重构。如果没有它,随着代码维护的进行,新引入的bug就会越来越多。
156, 利用特性为应用程序提供不同的版本。
比如,我们的程序可能分为体验版和完整版,他们能使用的功能是不一样的,我们不可能去分别建立两个不同的程序,利用特性(Attribute)的功能就可以完成这种定制。对方法或类使用[Conditional("ONLINE")]特性,在文件的最顶部定义#define ONLINE,Conditional可以是复数的,即可以标明一个方法同时是ONLINE和OFFLINE的。我们还可以在工程的属性里定义ONLINE,OFFLINE使其对整个工程有效。
157, 从写第一个界面开始,就进行自动化测试。
这一点着重于UI的自动化测试。Code UI Automation是一个Vs自带的UI自动化测试工具,适当的时候应该学习学习。
【进阶修炼】——改善C#程序质量(9)的更多相关文章
- 【进阶修炼】——改善C#程序质量(1)
这是一个大纲形式的概要,以便自己可以花较少的时间反复阅读.在开发中,多加注意这些有用的建议,让自己成为一个更优秀的程序员.内容主要来自<编写高质量代码-改善C#程序的157个建议>(陆敏技 ...
- 【进阶修炼】——改善C#程序质量(10)
158,不要写冗余注释. 注释应该写代码没有表达的东西. 代码能够自我描述就不要加注释. 159,废弃的注释应该尽早删除. 废弃的注释由于年代太久远,已经和现在的代码逻辑不匹配了,这样的注释只会误导人 ...
- 【进阶修炼】——改善C#程序质量(8)
122,以<Company>.<Component>作为命名空间. 如Microsoft.Windows.Design.也可以用域名作为空间,如www.microsoft.co ...
- 【进阶修炼】——改善C#程序质量(7)
113,声明变量时考虑最大值. Ushort的最大值是65535,用于不同的用途这个变量可能发生溢出,所以设计时应充分了解每个变量的最大值. 114,MD5不再安全. MD5多用于信息完整性的校验.R ...
- 【进阶修炼】——改善C#程序质量(6)
90,不应为抽象类指定public的构造函数. 抽象类即使指定了public的构造函数,也是不能实例化的,编译通不过.抽象类的构造函数应该设定为protected,它的作用应该是初始化自己的成员,以及 ...
- 【进阶修炼】——改善C#程序质量(5)
71, 区分异步和多线程的应用场景. 计算机的很多硬件,如硬盘,光驱,声卡,网卡都有DMA(Direct Memory Access)功能,它可以不占用cpu的资源,而异步的提出恰恰就是基于这个的.而 ...
- 【进阶修炼】——改善C#程序质量(4)
46, 显示释放资源,需要实现IDisposable接口. 最好按照微软建议的Dispose模式实现.实现了IDisposable接口后,在Using代码块中,垃圾会得到自动清理. 47, 即使提供了 ...
- 【进阶修炼】——改善C#程序质量(3)
32, 总是优先考虑泛型. 泛型代码有很好的重复利用性,和类型安全性. 33, 应尽量避免在泛型类中声明静态成员. 静态成员达不到共享的目的.List<int>和List<Strin ...
- 【进阶修炼】——改善C#程序质量(2)
16, 元素可变的情况下应避免用数组. 数组是定长的集合,可以考虑用ArrayList或List<T>集合.ArrayList元素是object类型,有装箱的开销,性能较低.另外Array ...
随机推荐
- Linux中SFTP命令
sftp和ftp是两种协议是不同的,sftp是ssh内含的协议,只要sshd服务器启动了,它就可用,它本身不需要ftp服务器启动. 1.常用登陆方式: 格式:sftp <user>@< ...
- Knockout: 实践CSS绑定和jQuery的blur失去焦点事件, 给未通过校验的输入框添加红色边框突出显示.
目的: 实践一下Knockout提供的CSS绑定功能和JQuery的blur失去焦点事件, 这次不使用Knockout的afterkeydown事件了. 步骤: 先在htm中添加.error的css样 ...
- sudo: /etc/sudoers is owned by uid 755, should be 0
在ubuntu环境下, 想往/etc/sudoers中添加可以执行sudo操作的用户,使用root将/etc/sudoers的权限修改为755后,提示出现标题中的错误: 修正方法:将/etc/sudo ...
- NDK 在 Android studio如何使用(Android studio NDK)
其实这个东西入门的话.直接在官网查找demo再结合文档就能间接了解如何构建是最快捷的. 这里提供一下官网和demo的地址. 官网的NDK在Android studio的搭建:http://tools. ...
- 解决 slf4j + log4j 在云服务上打印乱码
由于云服务器的环境是纯英文的 虽然在eclipse中可以打印日志显示中文,但是实用putty的时候查看却是乱码,下载日志也同样是乱码 那么只要设置utf-8即可
- 腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH ...
- 【Unity】6.5 Time类、Mathf类、Coroutine类
分类:Unity.C#.VS2015 创建日期:2016-04-20 一.Time类 Unity引擎提供的Time类可获取和时间有关的信息.计算帧速率.调整时间流逝速度等. 1.成员变量 2.示例 ( ...
- MyEclipse中设置jsp页面为默认utf-8编码
转自:http://www.cnblogs.com/xdp-gacl/p/3496161.html 在MyEclispe中创建Jsp页面,Jsp页面的默认编码是“ISO-8859-1”,如下图所示: ...
- C#.NET中遍历指定目录下的文件(及所有子目录及子目录里更深层目录里的文件)
//遍历一个目录下所有的文件列表,代码实例 DirectoryInfo dir = new DirectoryInfo(folderName);var list = GetAll(dir); /// ...
- 生产BackPressure 的代码
public class BackPressureStatsTrackerImpl implements BackPressureStatsTracker { private static final ...