笔者从事开发多年,看一些开源项目的源码有这样的感受,比如Spring、ApacheCommon等,是一件令人愉快的事情。这有两个原因:1)代码质量非常高;2)命名特别规范(这可能与老外的英语水平有关)。写出高质量的代码不是一件容易的事,需要多年的实践,是一个量变到质变的过程,但要写出好名字,只需要有良好的英语语法基础和一种自我意识。达到。这篇博文会结合我的开发经验总结一些命名规则。这些命名规则纯属个人习惯,不代表理想规则。列在这里,供大家交流讨论。1、不要使用无意义的英文字母for(inti=0;i<10;i++){...}这是很多Java基础语法书籍中常见的代码片段。作为教材,这样写没有错,但是作为真正的代码编写,程序员一定要养成良好的习惯,不要使用这种无意义的命名方式。这里可以使用“索引”。2、不要用拼音,甚至拼音词首的声母=5;//循环次数zzje=1000.00//转账金额作者在做代码检查的时候遇到过无数次这样的命名,让人哭笑不得3.要用英文,而且要用准确的英文,无论是拼写还是语法单数名词,必须使用单数英文,如Account、Customer。对于数组、列表等对象集合的命名,必须使用复数形式,最好根据英语语法基础知识使用准确的复数形式,如Listaccounts,Setstrategies。对于布尔值的属性,很多开发者习惯使用isXXX,比如isClose(是否关闭),不过这里有两个建议:1)***不要使用“is”,因为JavaBean规范生成get/set方法对于properties,在上面的例子中,生成的get/set方法会变成“getIsClose/isIsClose/getIsClose”,很别扭;2)由于布尔值通常反映“是否”,所以准确的用法,应该是用“形容词”。上面的例子最终应该改为closed,那么get/set方法就是“getClosed/isColsed/setClosed”,很符合英文阅读习惯。4、方法名需要使用“动宾结构词组”或“是动词+谓语结构词组”。如果对象是对象的集合,最好使用复数:createOrder(Orderorder)//goodorderCreate(Orderorder)//badremoveOrders(Listorders)//goodremoveOrder(Listorder)//坏5。对于常见的“增删改查”方法,命名要慎重***:Add:create和add最常用,但***是根据英文的语义来区分的,有帮助为了理解,create表示创建,add表示增加。比如创建一个Student,用createStudent比addStudent好,为什么呢?想想如果有一个类叫Clazz(class,避免java关键字),现在要给一个Clazz添加一个Student,Clazz很容易定义一个addStudent(Student学生)的方法,这样就更容易混淆了。Modification:常见的有alter、update、modify。个人认为修改是最准确的。查询:获取单个对象可以使用get或者load,但是我个人更推荐使用get。解释请参考第7点的说明,不考虑条件的枚举,用list,条件查询用search(***不要用find,find强调结果英文,就是“find”的意思,你提供的是“查询”方法,不能保证输入的条件总能“找到”结果)。delete:delete和remove比较常用,但是delete推荐使用delete,因为remove是“移除”的意思。可以参考Clazz的例子来理解。要从班级中删除学生,将使用removeStudent。6.喜欢冗长的方法名,不要使用容易混淆的缩写。曾经遇到过一种判断收款账户和收款账户是否相同的方法。结果看到一个名字是这样的:checkIsOrderingAccCollAccSame(...)//看不懂,立马改成:isOrderingAccountSameAsCollectionAccount(...)//有点长,但是很好读,而这种情况总是比较少见的。7、如果你在设计一个业务系统,最好不要用专业术语来命名。我以前工作的公司制定了这样的命名规则。接口必须以“I”开头,数据传输对象必须以“DTO”开头。后缀,数据访问对象必须以“DAO”为后缀,域对象必须以“DO”为后缀。之所以不推荐这种方式,是希望设计人员从一开始就引导开发人员,从“业务”出发思考问题,而不是从“技术”出发。所以接口不需要以“I”开头,只要它的实现类以“Impl”结尾即可(注:笔者认为接口与细节无关,与技术无关,但implementationclass和implementation相关,没什么好听的),数据传输对象无非就是保存一个对象的信息,所以可以用“**Info”,比如CustomerInfo,领域对象本身就是业务核心,所以还是以真名出现,比如Account,Customer,至于“DAO”,这个词来源于J2ee设计模式。笔者在之前的项目中使用了“***Repository”这个名字,意思是“***仓库”,比如AccountRepository。关于“Repository”这个词命名来源于EricEvans的《Domain-Driven Design》一书中的仓库概念。EricEvans对Repository的定义是:领域对象的概念集合。我个人认为这个命名是非常恰当的。跳出思维,站在业务的角度思考问题。说到这里,可能有人会反驳:像Spring、Hibernate这样优秀的框架不都是以“I”开头的接口,用“DAO”来命名数据访问对象吗?这是正确的!但是不要忽视语义的上下文。Spring和Hibernate框架是纯技术框架。我这里说的场景是设计业务系统。8、成员变量不要重复类名。比如很多人喜欢在Account对象的成员变量中使用accountId、accountNumber等名称。其实大可不必。想一想成员变量不会孤立存在。当你引用accountId时,它必须是account.accountId,使用account.id就足够了。“勿以善小而不为,勿以恶小而为之”,“细节决定成败”,有太多的名言告诉我们要注重细节。优秀的程序员一定要有扎实的基础,而像命名规则这样容易掌握的基础,我们何不现在就行动呢?