zoukankan      html  css  js  c++  java
  • 编码规范(c#)

    万丈高楼平地起,好的编码风格能让别人撸起来更带劲,反之则想吐槽这是哪个傻X写的,这都是些什么乱七八糟的玩意?

    然后看后面的注释发现是自己以前写的,那场面一度很尴尬。。。。

    规约不是规则,不是一定要这样,就好比你去一个团队,人家都是用英文,然后你是中文,你这样还怎么展开工作交流?只怕过不了多久就让你滚蛋了。

    下面是我工作上的一些简单总结,仅供参考,有啥错误欢迎指正。

    一、编程规约

    (一)命名风格

    1.代码中命名严禁使用拼音与英文混合方式,更不允许直接使用中文(公司规定的,没办法)

    说明:正确的英文拼写和语法可以让阅读者理解,避免歧义,即使纯拼音命名也要避免采用。

    有人就要说了,以前看到一个新闻说人家妹子用中文声明变量,然后还是个高级设计师,类似于

     public string 我不管 = “你不知道程序媛有多稀缺吗?混蛋” ;

    2.类名、类属性、方法名、命名空间使用UpperCamelCase大写驼峰风格,英文单词首字母大写

    3参数名、成员变量、局部变量、局部变量都统一用lowerCamelCase小驼峰风格(第一个词首字母小写,后面每个词首字母大写)

    localCache/userList

    4常量命名全部大写,单词间用下划线隔开

    5抽象类命名用Abstract或base开头;异常类用Exception结尾;测试类以测试的类名开始,以Test结尾

    6杜绝完全不规范的缩写,避免望文不知义 ex:AbstractClass缩写AbsClass

    7使用设计模式,建议在类名中体现出具体模式。

    public class OrderFactory

    8类中的声明、方法和属性加上有效的Summery注释

    /// <summary>
    /// 该类是用于对用户的控制器操作类
    /// </summary>
    public class SysuserController
    {
      /// <summary>
      /// 用户名
      /// </summary>
      public string name;
      /// <summary>
      /// 获得用户名
      /// </summary>
      Public string getName()
      {
        // return this.name;
      }
    }

    9枚举类名建议带上E前缀或Enum后缀,枚举成员名称需要全大写,单词用下划线隔开

    (二)常量定义

    1.不允许出现任何未经定义的常量直接出现在代码中。反例 string key=“caheKey_”+user.Name;

    (三)格式规约

    1.使用Ctr+K+D快捷键进行代码格式化

    2大括号内为空,简写成{}即可,不需要换行;如果是非空代码,则左右括号各占一行,内容另起一行

    public string getName() { }
    public string getName()
    {
      return this.Name;
    }

    3.if/for/while/switch/do等保留字与左右括号之间都必须加空格

    4.任何运算符左右必须加一个空格

    5缩进采用4个空格,尽量不要使用tab字符(vs中tab默认是4个)

    public static void main(string[] args)
    {
         // 缩进4个空格
      string name = “Jack”;
      // 运算符的所有必须空一格
      bool isMe = true;
      // 关键字if与括号之间必须有一格空格,括号内的方法体不需要空格
      if (isMe == true)
      {
        Console.WriteLine(“my name is ” + name);
      }
      else
      {
        Console.WriteLine(“your name is ” + name);
      }
    }

    6方法参数在定义和传入时,多个参数逗号后加空格

    7没有必要增加若干空格来使某一行相应的字符对齐。

    int a = 3long b = 4string str = “hello world”;

    最后,对于混用的

    (四)控制语句

    1.在一个switch块内,每个case要么通过break/return等来终止,要么注释说明程序将继续执行到哪个case为止,必须包含一个default语句,并且放在最后

    2.在if/else/for/while/do语句中都必须使用大括号,即使只有一行代码,避免下面的形式

    if (condition)
    {
      //... Do something;
      return obj;
    }
       
    // else的业务逻辑代码

    3.表达异常的分支时,少用if-else方式,如果非得使用勿超过3层

    4除常用方法(如GetXXX/IsXXX)为,不要在条件判断中执行其他复杂语句,将复杂逻辑判断的结果赋值给一个有意义的bool变量

    bool exsisted = file.Exsist() && obj != null && ...;
      If (exsisted)
      {
        ...
      }

    (五)注释规约

    1.类、类属性、类方法用Summary规范

      /// <summary>
      /// ....
      /// </summary>

    2.所有抽象方法用Summary注释,除了返回值、参数、异常说明外,还须指出该方法做了什么事,实现了什么功能

    3.方法内部单行注释,在上方另起一行,用//注释,多行用/**/注释

    4.代码修改的同事,注释也要进行相应的修改

    5.注释的代码尽可能配合说明,而不是简单注释掉。

    二、异常处理

    1.异常不要用来做流程控制,条件控制

    2.对大段代码进行try-catch,这是不负责任的表现。应该分期稳定代码和非稳定代码

    3.捕获异常是为了处理它,不要捕获了却什么都不处理而抛弃,不想处理,就将该异常抛给他的调用者。

    4.有try块放到了事务代码中,catch异常,如果要回滚事务,一定要注意手动回滚

    5.finally块必须对资源对象、流对象、数据库连接进行关闭,有异常也要做try-catch

    6.捕获异常与抛异常,必须完全匹配,或者捕获异常是抛异常的父类

    7.方法的返回值可以是null,不强制返回空集合或空对象,加注释说明什么情况会返回null指,进行null判断,防止空引用异常

    三、数据库

    (一)建表规约

    1.表达是与否概念的字段,使用is_xxx的方式命名(1表示是,0表示否),业务状态的字段也是,中间用其他数字表示,比如3表示退回

    2.表名、字段名用小写字母和数据,不要出现数字开头,不要两个下划线中间只出现数字

    3.表名不要使用复数名词

    4禁用保留字,比如desc、range等

    5.主键索引名为pk_字段名;唯一索引名为uk_字段名;普通索引名为idx_字段名

    6.小数类型为decimal,float和double存在精度损失问题,很可能在值比较时,得不到正确结果

    7.如果字符串长度几乎相等,使用char定长

    8.新增字段须增加字段注析,如果涉及数字表达含义,注明每个数字代表的含义,比如1代表业务完成,0代表业务开始,3代表业务退回

    9.表命名最好加上业务名称_表作用

    10.单表行数超过500万行货单表容量超过2GB,才推荐进行分库分表

    11.合适的字符存储长度,不但节约数据库的表空间,节约索引存储,更重要提升检索速度

    (二)索引规约

    1.业务上具有唯一特性的字段,即使是多个字段的组合,也建立唯一索引

    2.在varchar字段上建立索引是,须指定索引长度,没必要对全字段建立索引

    3.页面搜索不要左模糊或者全模糊,如果需要走搜索引擎

    4.有order by场景,注意利用索引的有序性

    5.利用覆盖索引来进行查询操作,避免回表

    6.利用延迟关联或者子查询优化超多分页场景

    7键组合索引的时候,区分度坐高的在最左边

    8.防止因字段类型不同造成的隐式转换,导致索引失效

    (三)SQL语句

    1.不要使用count(列名)或count(常量)来替代count()

    2.使用ISNULL()来判断是否为NULL值

    3.在代码中分页查询逻辑时,若count为0应直接返回,避免执行后面的分页语句

    4.in操作能避免则避免

    5.存储过程难以调试和扩展,更没有移植,避免使用

    6.数据订正时,确认无误才执行更新

    7.truncate table 比delete速度快,且使用的系统和事务日志资源少,但无事务且不触发trigger,有可能造成事故,不建议使用此语句

  • 相关阅读:
    Spring Security11、登录用户管理
    Spring Security10、账号登录并发控制
    win10下怎么打开notepad++多个实例
    gnu make
    es学习记录
    upj
    JConsole连接远程Java进程
    常用的几种成本核算方法
    SQL SERVER 统计字符串中某字符出现的次数
    centos误删除系统自带的python解决方法
  • 原文地址:https://www.cnblogs.com/carlpeng/p/12035143.html
Copyright © 2011-2022 走看看