vlambda博客
学习文章列表

关于我的一些代码规范


前言

有个好的代码规范

1.有助于团队合作

2.减少BUG处理

3.降低维护成功

4.有助于代码审查

5.重要一点不会被骂关于我的一些代码规范



一\命名规范


 命名规范主要涉及命名空间、类型、接口、属性、方法、变量等相关命名,其主要规范有:

1\使用Pascal(单词首字母大写)命名方式对命名空间、类型、枚举类型、枚举值、事件、属性、方法、常量进行命名。

  例:public class PersonManager {}

2\使用Camel()命名方式对参数、变量、字段进行命名。

  例:private string userName;  

        禁止使用缩写,除URL、IO等能达成共识的缩写除外,使用缩写可全大写。  

        例:System.IO;

3\接口以I做为前缀进行命名。

  例:public interface IConvertor {}

4\抽象类以Abstract为前缀或者以Base为后缀进行命名。

  例:public abstract class PersonBase {}

5\异常类型以Exception为后缀。

  例:public class CustomException {}

6\在对任何东西命名时需要使用有意义的名称,并且保证单词拼写正确以及语法正确,避免使用拼音(地名等通用拼音除外)。

例:public string Name {get; set;}  反例:public string N {get; set;}

7\所有成员变量声明在类的顶端,用换行把他和其他方法分开

例:

private class Product

{

private string _productld;

private string _productName;

}

8\使用某个控件的值时,尽量命名局部变量

例:

public string GetTitle()

{

string title = lbl_Title.Text;

return title;

}

 

9\私有变量的命名

Private 的私有变量使用下划线"_"+camelCasing的大小写规则,以便快速确认该变量的作用域。

如: private int _userId;

10\首字母缩写词的大小写

首字母缩写词是由一个短语的首字母组成的,如Xml(ExtensibleMarkuLaguage),IO(Input and Output)。它和单词缩写是有区别的,单词缩写仅仅是把一个单词的长度变短。

把两个字母的首字母缩写词全部大写,除非它是camelCasing的第一个单词。

using System.IO;

public void StartIO(Stream ioStream)

由三个或以上的字母组成的首字母缩写词,只有第一个字母大写,如Xml,Html.除非首字母是camelCasing标识符的第一个单词。

using System.Xml;

public void ProcessXmlNode(XmlNode xmlNode)

 

11\复合词的大小写

不要把复合词中的首字母大写。复合词要当成一个单词来处理。

如endpoint, callback,metadata,namespace等都是正确的写法

12\在带单位的值的变量后加上"_camelCasing单位"

将单位加入标识符命名中,可以使使用者快速准确的知道传人数据的单位,减少错误的发生。

如public void CreateCache(int cacheSize)

传入的数据是bytes, KB, MB 还是GB?

改成public void CreateCache(int cacheSize_mb)

一目了然,并且会减少调用者传入错误数据的可能。

13\名字一定要能够表达出标识符的含意(不要用 v1,v2,v3这样的名字)

public static void CloneChars(char[] cl1 , char[] cl2 )
{
for (var i = 0; i < cl1.Count(); i++)
{
cl2[i] = cl1[i];
}
}

别人无法知道cl1还是cl2是要拷贝的char数组,他必须进到这个函数去看完整个逻辑才可以调用

改成下面的样子 一眼就看懂了

public static void CloneChars(char[] source , char[] target )
{
for (var i = 0; i < source.Count(); i++)
{
target[i] = source[i];
}
}

14\在命名时要使用专业的单词,避免使用"空洞"的单词

public int Size;

我第一眼看到会想到 文件的大小关于我的一些代码规范;

但是作者想表达的是 节点的大小,不如写成

public int nodeSize

15\代码千万别太骚气

public static string ConvertXml2Html (string sourcePath)

有些人在看到这个方法的时候怎么想也想不明白这个2是做什么用的,是把一个Xml文件变成两个Html?

熟悉英语文化的人可能知道这是To的意思;不如写成:ConvertXmlToHtml

16\派生类的末尾使用基类名称

例:从 Stream 继承的 Framework 类型以 Stream 结尾,从 Exception 继承的类型以 Exception 结尾

17\泛型类型参数的命名

使用描述性的名字来命名泛型类型参数,并且在前面加上T前缀

如下面都是很好的命名

public delegate TOutput Converter<TInput, TOutput>(TInput from);

如果只有一个类型参数,可以只用一个字母T来表示泛型

public class Nullable<T>

public class List<T>

如果泛型参数有约束,那么需要在泛型类型参数名中需要显示出该约束

public interface ISessionChannel<TSession> where TSession:ISession

18\枚举类型的命名法

要用单数名词而不是复数命名枚举类型,如要用FaceColor而不是FaceColors

其实我有时候会用复数词,想表达这个里面有很多内容;但是;这玩意儿本来就是枚举类型了谁不知道里面是复数啊,有点画蛇添足的意思,偶尔有些人会用 Enum做前后缀;其实我觉得也有点画蛇添足的意思

public enum FaceColor

{

Red,

Yellow,

Blue

}

19\要用肯定性的短语命名布尔属性。最好在前面选择性的加入"Is"、"Can"、"Has"等前缀。

CanSeek比CantSeek和Seekable都更准确和容易理解。


20\事件命名,要用动词 或者 动名词,在js里面咱们用的最多了

如:Clicked、Painting、DroppedDown 等等

要用现在进行时(ing)和过去式(ed)来赋予事件发生之前和之后的概念。而不是使用Before和After.

如关闭前发生的close事件应该命名为Closing,而在关闭之后发生的应该命名为Closed.


二\布局规范


 布局规范的目的是使代码变得整洁,提高代码可读性,其主要规范有:

1\代码缩进为4个空格。

  左右花括号必须独自一行,括号内容为空时除外:  

例:

         public void WriteLog(string log)    
         {      
         Console.WriteLine(log);    
         }

    public void EmptyMethod(string log) {}

2\括号的使用:

if/for/while/do等关键字后面与左括号直接需要加空格:

      if (x == 1)

运算符左右需要加空格:

      a = c + b;

3\单行代码限制120个字符,超长处理方式:

第二行相对第一行缩进4个空格,从第三行开始无需缩进。

运算符及方法调用的“.”需要跟随换行,但逗号不需要。

   例:

         WebHost.CreateDefaultBuilder(args)          .
          UseStartup<Startup>()          
           .Build();        
           App.Method(a          
           + b,          
           c);

4\Region的使用

Region的使用可以明确代码块的范围并提供相应注释

同时Region也可以用来组织代码结构,我们使用以下Region约定来使组织类:

一个类应该用Region划分出Fields、Properties、Constructor、Private Methods和 Protected & Public Methods 五个区域。并按照上述顺序从上到下排列。

其中Fields、Properties、Constructor、Private Methods必须放在Region。而Protected & Public Methods 必须放在外面。Protected & Public Methods 是代码阅读者查找最频繁的内容,这样做可以方便代码阅读者使用Ctrl+M, O时能够最快速度定位到自己想要查找的内容。

例如:

关于我的一些代码规范


5\关于目录结构问题

拿前端的js为例

每个模块新建一个文件夹;内部放入此功能的所需js

js名字要和html文件名字一样;一眼就能跟踪到js和html的关系

下面的结构;个人以为已经很好了;最起码我一眼就能看懂了

 

关于我的一些代码规范



三\注释规范


1\类注释

/// <summary>  
///这里写一些类的说明  
/// </summary>  
public class Post

2\属性及方法注释:

   /// <summary>  
     /// 方法的说明  
     /// </summary>  
     /// <param name="id">入参说明</param>  
     /// <returns>post instance</returns>  
     public Post GetPostById(int id)

3\代码单行注释:

  //单行注释不用说了;就这样巴拉巴拉简单的备注一下

4\代码多行注释:

/*多行注释
可以写很多文字
一般可以写一下逻辑思路什么的
*/

End 推荐几个比较不错的VS插件;可以提高一些工作效率




1\tyleCop



  StyleCop是一个代码分析工具,StyleCop有两个版本StyleCop和StyleCop Analyzers,前者适用于VS2010-VS2017所有版本,它的原理是在编译时对代码进行分析,而StyleCop Analyzers仅支持VS2015+,它基于.Net的roslyn编译框架实现的,它支持开发时对代码进行实时分析(不再需要等编译)。  StyleCop:https://github.com/StyleCop/StyleCop  

StyleCop Analyzers:https://github.com/DotNetAnalyzers/StyleCopAnalyzers




2\Resharper



Resharper是jetbrains公司开发的一个VS收费插件,它不仅包含了代码分析,还具备了代码生成、编译、测试、调试等功能。我有破解版,这个我一直在用 我的网盘:

链接: https://pan.baidu.com/s/1IP6qtSRZwJu2zgmCtnfdVA 密码: 6c7m




3\EditConfig



  EditConfig是一个跨编辑器/IDE的代码风格一致性维护工具(协议/插件),现在VS2017已经支持EditConfig




4\DocFx



DocFx是一个API文档生成工具,使用DocFx可以快速的搭建一个程序使用、及API文档,样式可参考:  

DocFx教程:http://dotnet.github.io/docfx/tutorial/docfx_getting_started.html  

API文档:http://dotnet.github.io/docfx/api/Microsoft.DocAsCode.html

 

:以上内容有些加入了个人的一些观点看法,仅供参考,有不足的地方希望大家继续补充;