程序开发中命名的那些事

date
Jun 23, 2019
slug
program-naming
status
Published
tags
开发规范
summary
type
Post
 
这几周明显感觉自己懒散下来了, 也该是时候调整调整自己,激励下自己了。以前在看《代码整洁之道》这本书的时候没啥体会,感觉也就这样,今天在坐动车的一个小时里,看了第二章节 的<有意义命名>,感触特别深,可能跟我这段时间接手的这个衰老的项目有关吧,接下来结合最近的项目谈谈我的感想。 说起命名,不要觉得不重视,我个人觉得一个程序,他的原子部分就是由无数个命名组成的,就好比一部电影,他的背后有很多有名有姓的人造就的一样。对于中国 人来说,命名本身就是一个很讲究的事情,一个孩子出生,父母会想给他起一个好听的名字,同样的,程序员在开发程序的时候,命名也要得体,让这个名字名正言 顺。切忌拼错单词这个感触最近十分深刻,一个庞大的项目,辗转几人接手,就因为刚开始那个人的一个单词拼错,就一直遗留到现在,感觉就像是一锅鲜美的汤,掉进了一颗老鼠 屎,搞的后来的人想修改都不敢修改,一动就伤全身,小病不早治,大病要人命啊。不论是数据库设计还是程序设计,不确定的单词查下字典,多查几次自然就背下 来了,拼错了就即时纠错。每个概念对应一个词这是套用了《代码整洁之道》的一个小标题,在项目中我也看到过中文理解上是同一个词,这边一个英文单词,另一边又是另一个英文单词,你丫的秀英语吗?如果 项目是多人开发的,就更加混乱了,所谓不以规矩,不能成方圆,同样是在开发的初期,就得跟自己的程序员约定一些常用的方法命名,比如获取多个数据 find*,获取单个数据get*,物理删除delete*,逻辑删除remove*等等,之后就靠程序员自身的素质了。少用废话类型是一个List的变量,在命名的时候,硬是加个list,这不是多此一举么,之前有幸和我的高级项目经理一起吃饭聊天,他有10年的编码经验了,那次 我问他为什么你的一些变量前面都要加_作为前缀开头,他说这是为了区分作用域。这个我自己不敢苟同,对于老程序员来说,他可能从以前的C到现在的java 一路走来,所以编码风格上也会有所影响,对于我这种刚接触就是java的人来说,作用域在java里面也就那么几个,没必要特地去用变量声明。同样的,一 个类变量,你无法知道他返回的是什么值,比如 Person personString,这就是错误的,也许现在Person返回的是String,将来类的返回值一变,这个变量就废了,所以少些废话。名字多了就打包比较坑爹的一段代码:
public List<Person> findPersonByDate(Map<String,Object> params){
    List<Person> person = null;
    if(params.get("startDate") != null ){
        //doSomeThing;
    }else if(params.get("endDate") != null){
        //doSomeThing;
    }else{
        //doSomeThing;
    }
    return person;
}
这是一段很糟糕的代码,理由很简单,传入的是map,谁知道你内部需要哪些参数,以至于需要一份手册文档来对应这个接口,好一点的话,这么做。
public List<Person> findPersonByDate(Date startDate,Date endDate){
    List<Person> person = null;
    if(startDate != null ){
        //doSomeThing;
    }else if(endDate != null){
        //doSomeThing;
    }else{
        //doSomeThing;
    }
    return person;
}
嗯,只能说好一些了,至少别人能下手了,但是如果传入的参数很多怎么办,要别人一个一个填上,万一顺序乱了呢,这个时候面向对象的好处就体现出来了。
public List<Person> findPersonByDate(DateQuery dateQuery){
    List<Person> person = null;
    if(dateQuery.getStartDate() != null ){
        //doSomeThing;
    }else if(dateQuery.getEndDate() != null){
        //doSomeThing;
    }else{
        //doSomeThing;
    }
    return person;
}
创建一个DateQuery的类,里面包含你需要传入的属性,然后就让调用者自己去拼凑这个类吧,依靠IDE的提示,他不会来问你要传什么参数了,所以,如果参数多的话,整合成一个,打包到一个类里吧。英文还是中文这是很有中国特色的开发问题,到底是用中文去命名还是英文去命名呢,按照我的高级项目经理的话来说,你连中文都还不会说呢,用什么英文啊。的确,很多领域模型里面的英文单词很专业,第一眼你不太明白这是什么意思,但是我个人还是比较主张用英文的,不明白可以拿词典查阅,一回生两回熟呗,只是别用一些太生僻 又长的英文单词。中文我实在是不习惯,拼音缩写第一眼看去同样是你不明白,英文你还能查字典,拼音你只能靠猜了。yzyq,金融领域的,你知道是啥意思不?

© Frandy 2021