zoukankan      html  css  js  c++  java
  • 【进阶修炼】——改善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自动化测试工具,适当的时候应该学习学习。

  • 相关阅读:
    ROS2概述和实践入门
    ROS2与FastRTPSROS2与FastRTPS
    RoboWare Studio已经停更
    ubuntu20.04 Roboware安装遇到的问题
    Ubuntu16.04安装ROS2
    拥抱ROS2系列:ROS2概述和实践入门(一)
    clash for Linux安装使用
    Ubuntu 安装RoboWare
    Ubuntu 18.04 安装VSCode
    开源ImageFilter库For IOS源码发布
  • 原文地址:https://www.cnblogs.com/xiashengwang/p/4013702.html
Copyright © 2011-2022 走看看