万丈高楼平地起,好的编码风格能让别人撸起来更带劲,反之则想吐槽这是哪个傻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 = ;
long b = ;
string 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,有可能造成事故,不建议使用此语句

编码规范(c#)的更多相关文章

  1. Android的编码规范

    一.Android编码规范 1.学会使用string.xml文件 在我看来,当一个文本信息出现的次数大于一次的时候就必须要使用string.xml 比如一个保存按钮 , 不规范写法: <Butt ...

  2. PHP 高级编程(1/5) - 编码规范及文档编写

    PHP 高级程序设计学习笔记20140612 软件开发中的一个重要环节就是文档编写.他可以帮助未来的程序维护人员和使用者理解你在开发时的思路.也便于日后重新查看代码时不至于无从下手.文档还有一个重要的 ...

  3. 【原】JAVA SE编码规范

    /* * 编码规范: * 1.所有的命名遵循"见名知意"的原则 * 2.所有的命名不允许使用汉字或拼音 * 3.Java的工程命名建议使用小写,比如:oa.crm.cms... * ...

  4. 浅谈Android编码规范及命名规范

    前言: 目前工作负责两个医疗APP项目的开发,同时使用LeanCloud进行云端配合开发,完全单挑. 现大框架已经完成,正在进行细节模块上的开发 抽空总结一下Android项目的开发规范:1.编码规范 ...

  5. PHP编码规范PSR-2

    .note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeit ...

  6. Objective-C开发编码规范【转载】

    概要 Objective-C是一门面向对象的动态编程语言,主要用于编写iOS和Mac应用程序.关于Objective-C的编码规范,苹果和谷歌都已经有很好的总结: Apple Coding Guide ...

  7. 前端编码规范之CSS

    "字是门面书是屋",我们不会去手写代码,但是敲出来的代码要好看.有条理,这还必须得有一点约束~ 团队开发中,每个人的编码风格都不尽相同,有时候可能存在很大的差异,为了便于压缩组件对 ...

  8. 前端编码规范之JavaScript

    上次浅谈了下关于CSS的编码规范,大部分童鞋持赞同意见,仍存在一些童鞋不太理解这些规范的意义. 如果是个人或者小作坊开发,其实这些所谓的编码规范也没啥意思,因为大家写好的代码直接就给扔到网上去了,很少 ...

  9. Java Script 编码规范【转】

    Java Script 编码规范 以下文档大多来自: Google JavaScript 编码规范指南 Idiomatic 风格 参考规范 ECMAScript 5.1 注解版 EcmaScript ...

  10. python编码规范

    python编码规范 文件及目录规范 文件保存为 utf-8 格式. 程序首行必须为编码声明:# -*- coding:utf-8 -*- 文件名全部小写. 代码风格 空格 设置用空格符替换TAB符. ...

随机推荐

  1. 文件输入输出函数fgetc/fputc及fgets/fputs等文件指针位置的变化

    文件打开后才可以对文件进行操作.也就是说,文件必须经历打开-操作-关闭的过程.如前所述,C语言对文件的操作都是通过调用标准I/O库函数来实现的.文件操作实际是指对文件的读写.文件的读操作就是从文件中读 ...

  2. 查看redis占用内存大小的方法

    查看redis占用内存大小的方法 <pre>redis-cli auth 密码info</pre><pre># Memory used_memory:1349009 ...

  3. day7-字符串格式化

    msg='i am %s my hobby is %s' % ('lhf','alex') # # %代表标识,固定格式 s代表传入的为字符串,该字符串可接受任何类型 # # %d ,只能接收数字 p ...

  4. Java ------ 工厂模式、单例模式

    工厂模式 简单工厂模式: 1.创建Car接口 public interface Car { public void drive(); } 2.创建两个实体类,分别实现Car接口 public clas ...

  5. 解决 scp 和rsync 同步失败【rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.2]】

    解决 scp 和rsync 同步失败 报错信息截图: 解决问题的步骤: 1.检查对方的scp和rsync 是否能使用. rsync 在使用的时候,需要客户端和服务端都有rsync工具.scp 和 rs ...

  6. [ASP.NET Core 3框架揭秘] 文件系统[2]:总体设计

    在<抽象的"文件系统">中,我们通过几个简单的实例演示从编程的角度对文件系统做了初步的体验,接下来我们继续从设计的角度来进一步认识它.这个抽象的文件系统以目录的形式来组 ...

  7. 领扣(LeetCode)最大连续1的个数 个人题解

    给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3. 注意: 输入的数组 ...

  8. JSON——IT技术人员都必须要了解的一种数据交换格式

    JSON作为目前Web主流的数据交换格式,是每个IT技术人员都必须要了解的一种数据交换格式.尤其是在Ajax和REST技术的大行其道的当今,JSON无疑成为了数据交换格式的首选! 今天大家就和猪哥一起 ...

  9. 微信二维码添加logo

    生成带参数的二维码 为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送. 目前有 ...

  10. 科学使用Log4View2

    目录 目录 前言 科学使用 编辑和调试程序集 调试程序集 编辑程序集 结语 推荐文献 目录 NLog日志框架使用探究-1 NLog日志框架使用探究-2 科学使用Log4View2 前言 这个标题很低调 ...