规范C#代码的命名

JerryXia 发表于 , 阅读 (1,865)

本文结合我自己的开发经验,总结出若干命名规则,这些命名规则纯属个人的使用习惯,不代表是一种理想的规则,在这里列举出来,仅供参考。

1.切忌使用拼音,甚至是拼音首字母组合:

cishu =5; // 循环的次数
zzje = 1000.00 // 转账金额

2.要使用英文,而且要使用准确的英语,无论是拼写还是语法:

名词单数,必须使用单数英文,如Account、Customer。

对于数组,列表等对象集合的命名,必须使用复数,而且最好按照英文的语法基础知识使用准确的复数形式,如 List<Account> accounts、Set<Strategy> strategies。

对于boolean值的属性,很多开发人员习惯使用isXXX,如isClose(是否关闭),最好不要带“is”,由于boolean值通常反映“是否”,所以准确的用法,应该是是用“形容词”,上面的例子,最终应该被改为 closed。

3.方法名的命名,需要使用“动宾结构短语”或“是动词+表语结构短语”,笔者曾看到过千奇百怪的方法命名,有些使用名词,有些甚至是“名词+动词”,而且,如果宾语是一个对象集合,还是最好使用复数:

createOrder(Order order) good
orderCreate(Order order) bad
removeOrders(List<Order> orders) good
removeOrder(List<Order> order) bad

4.对于常见的在业务逻辑层的“增删改查”方法,命名最好要谨慎:

增加:最常见使用Create和Add,但最好根据英语的语义进行区分,这有助于理解,Create代表创建,Add代表增加。比如,要创建一个Student,用CreateStudent要比用AddStudent好,为什么?想想如果有个类叫Clazz(班级,避开关键字),现在要把一个Student加入到一个Clazz,Clazz很容易就定义了一个 AddStudent(Student student)的方法,那么就比较容易混淆。

修改:常见的有Update、Modify,个人觉得Modify最准确。

查询:对于获取单个对象,个人建议用Get,对于不分条件列举,用GetList,对于有条件查询,用Search(最好不要用Find,find在英文了强调结果,是“找到”的意思,你提供一个“查询”方法,不保证输入的条件总能“找到”结果)。

删除:常见的有Delete和Remove,但删除建议用Remove,因为Remove有“移除”的意思,参考Clazz的例子就可以理解,从班级移除一个学生,会用RemoveStudent。Delete在数据访问层建议使用。

5.宁愿方法名冗长,也不要使用让人费解的简写,笔者曾经遇到一个方法,判断“支付账户是否与收款账户相同”,结果我看到一个这样的命名:

CheckIsOrderingAccCollAccSame(...) 很难理解,我马上把它改为:
IsOrderingAccountSameAsCollectionAccount(...),虽然有点长,但非常容易阅读,而且这种情况总是出现得比较少。

6.数据实体类的Id尽量带上类的名称,例如,欢在Account对象的成员变量中ID的名字使用AccountId, 这个是为什么呢,主要是方便数据表在关联的时候的Mapping工作。

“勿以善小而不为,勿以恶小而为之”、“细节决定成败”,有太多的名言告诉我们,要注重细节。一个优秀的程序员,必须要有坚实的基础,而对于命名规则这样容易掌握的基础,我们何不现行?

添加新评论