关于我的一些代码规范
有个好的代码规范
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这样的名字)
别人无法知道cl1还是cl2是要拷贝的char数组,他必须进到这个函数去看完整个逻辑才可以调用
改成下面的样子 一眼就看懂了
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 EmptyMethod(string log) {}
2\括号的使用:
if/for/while/do等关键字后面与左括号直接需要加空格:
if (x == 1)
运算符左右需要加空格:
a = c + b;
3\单行代码限制120个字符,超长处理方式:
第二行相对第一行缩进4个空格,从第三行开始无需缩进。
运算符及方法调用的“.”需要跟随换行,但逗号不需要。
例:
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\类注释
2\属性及方法注释:
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
注:以上内容有些加入了个人的一些观点看法,仅供参考,有不足的地方希望大家继续补充;