程序命名规范

名称易读、可搜索

可读指的是不要使用一些生僻字,难以发音的单词。

可搜索是便于利用 IED 的自动补全和搜索功能,能根据我们的命名规范快速定位想要找的类或者方法等。

可读

名称读不出来,在讨论的时候就好像是一个沙雕。

哎,那个「treeNewBeeAxibaKula」类是什么作用?

听到这样的名字尴尬癌都犯了。

使用一些生僻字,犹如「王大妈的裹脚布,又长又臭」,没有两年脑血栓写不出这样的垃圾代码。

可搜索

IED 很智能,当我们输入 「Hash」的时候,会列举出所有 Hash 相关的类。

命名的时候最好符合项目命名习惯,列表数据查询大家使用 listXXX,你就不要用 queryXXX,统一命名规范,很重要。

包命名

包名统一使用小写点分隔符之间有且仅有一个自然语义的英文单词或者多个单词自然连接到一块(如 springframework,deepspace 不需要使用任何分割)。

包名的构成可以分为以下几四部分【前缀】 【发起者名】【项目名】【模块名】。

以下表格授权于「Java 填坑笔记」

常见的前缀可以分为以下几种:

前缀名


含义

indi(或onem )

indi.发起者名.项目名.模块名.……

个体项目,指个人发起,但非自己独自完成的项目,可公开或私有项目,copyright主要属于发起者。

pers

pers.个人名.项目名.模块名.……

个人项目,指个人发起,独自完成,可分享的项目,copyright主要属于个人

priv

priv.个人名.项目名.模块名.……

私有项目,指个人发起,独自完成,非公开的私人使用的项目,copyright属于个人。

team

team.团队名.项目名.模块名.……

团队项目,指由团队发起,并由该团队开发的项目,copyright属于该团队所有

顶级域名

com.公司名.项目名.模块名.……

公司项目,copyright由项目发起的公司所有

类名

类名使用大驼峰命名形式,应该使用名词或者名词短语,比如:Customer、Account。

避免使用 Manager、Processor 等动词。

接口名除了用名词和名词短语以外,还可以使用形容词或形容词短语,如 Cloneable,Callable 等,表示实现该接口的类有某种功能或能力。

属性

约束


抽象类

Abstract 或者 Base 开头

BaseUserService

枚举类

Enum 作为后缀

GenderEnum

工具类

Utils作为后缀

StringUtils

异常类

Exception结尾

RuntimeException

接口实现类

接口名+ ImpI 或者 前缀接口名 + 接口名

UserService + UserServiceImpl、IUserService + UserService

领域模型相关

/DO/DTO/VO/DAO

正例:UserDAO 反例:UserDo, UserDao

设计模式相关类

Builder,Factory等

当使用到设计模式时,需要使用对应的设计模式作为后缀,如ThreadFactory

处理特定功能的

Handler,Predicate, Validator

表示处理器,校验器,断言,这些类工厂还有配套的方法名如handle,predicate,validate

测试类

Test结尾

UserServiceTest, 表示用来测试UserService类的

方法名

方法命名一般为动词或动词短语,与参数或参数名共同组成动宾短语,即动词 + 名词。一个好的函数名一般能通过名字直接获知该函数实现什么样的功能。

布尔返回值的方法

注:Prefix-前缀,Suffix-后缀,Alone-单独使用

位置

单词

意义


Prefix

is

对象是否符合期待的状态

isValid

Prefix

can

对象能否执行所期待的动作

canRemove

Prefix

should

调用方执行某个命令或方法是好还是不好,应不应该,或者说推荐还是不推荐

shouldMigrate

Prefix

has

对象是否持有所期待的数据和属性

hasObservers

Prefix

needs

调用方是否需要执行某个命令或方法

needsMigrate

按需执行的方法

位置

单词

意义


Suffix

IfNeeded

需要的时候执行,不需要的时候什么都不做

drawIfNeeded

Prefix

might

同上

mightCreate

Prefix

try

尝试执行,失败时抛出异常或是返回errorcode

tryCreate

Suffix

OrDefault

尝试执行,失败时返回默认值

getOrDefault

Suffix

OrElse

尝试执行、失败时返回实际参数中指定的值

getOrElse

Prefix

force

强制尝试执行。error抛出异常或是返回值

forceCreate, forceStop

用来检查的方法

单词

意义


ensure

检查是否为期待的状态,不是则抛出异常或返回error code

ensureCapacity

validate

检查是否为正确的状态,不是则抛出异常或返回error code

validateInputs

异步相关方法

位置

单词

意义


Prefix

blocking

线程阻塞方法

blockingGetUser

Suffix

InBackground

执行在后台的线程

doInBackground

Suffix

Async

异步方法

sendAsync

Suffix

Sync

对应已有异步方法的同步方法

sendSync

Prefix or Alone

schedule

Job和Task放入队列

schedule, scheduleJob

Prefix or Alone

post

同上

postJob

Prefix or Alone

execute

执行异步方法(注:我一般拿这个做同步方法名)

execute, executeTask

Prefix or Alone

start

同上

start, startJob

Prefix or Alone

cancel

停止异步方法

cancel, cancelJob

Prefix or Alone

stop

同上

stop, stopJob

回调方法

位置

单词

意义


Prefix

on

事件发生时执行

onCompleted

Prefix

before

事件发生前执行

beforeUpdate

Prefix

pre

同上

preUpdate

Prefix

will

同上

willUpdate

Prefix

after

事件发生后执行

afterUpdate

Prefix

post

同上

postUpdate

Prefix

did

同上

didUpdate

Prefix

should

确认事件是否可以发生时执行

shouldUpdate

操作对象生命周期的方法

单词

意义


initialize

初始化。也可作为延迟初始化使用

initialize

pause

暂停

onPause ,pause

stop

停止

onStop,stop

abandon

销毁的替代

abandon

destroy

同上

destroy

dispose

同上

dispose

4.7 与集合操作相关的方法

单词

意义


contains

是否持有与指定对象相同的对象

contains

add

添加

addJob

append

添加

appendJob

insert

插入到下标n

insertJob

put

添加与key对应的元素

putJob

remove

移除元素

removeJob

enqueue

添加到队列的最末位

enqueueJob

dequeue

从队列中头部取出并移除

dequeueJob

push

添加到栈头

pushJob

pop

从栈头取出并移除

popJob

peek

从栈头取出但不移除

peekJob

find

寻找符合条件的某物

findById

与数据相关的方法

单词

意义


create

新创建

createAccount

new

新创建

newAccount

from

从既有的某物新建,或是从其他的数据新建

fromConfig

to

转换

toString

update

更新既有某物

updateAccount

load

读取

loadAccount

fetch

远程读取

fetchAccount

delete

删除

deleteAccount

remove

删除

removeAccount

save

保存

saveAccount

store

保存

storeAccount

commit

保存

commitChange

apply

保存或应用

applyChange

clear

清除数据或是恢复到初始状态

clearAll

reset

清除数据或是恢复到初始状态

resetAll

成对出现的动词

单词

意义

get获取

set 设置

add 增加

remove 删除

create 创建

destory 移除

start 启动

stop 停止

open 打开

close 关闭

read 读取

write 写入

load 载入

save 保存

create 创建

destroy 销毁

begin 开始

end 结束

backup 备份

restore 恢复

import 导入

export 导出

split 分割

merge 合并

inject 注入

extract 提取

attach 附着

detach 脱离

bind 绑定

separate 分离

view 查看

browse 浏览

edit 编辑

modify 修改

select 选取

mark 标记

copy 复制

paste 粘贴

undo 撤销

redo 重做

insert 插入

delete 移除

add 加入

append 添加

clean 清理

clear 清除

index 索引

sort 排序

find 查找

search 搜索

increase 增加

decrease 减少

play 播放

pause 暂停

launch 启动

run 运行

compile 编译

execute 执行

debug 调试

trace 跟踪

observe 观察

listen 监听

build 构建

publish 发布

input 输入

output 输出

encode 编码

decode 解码

encrypt 加密

decrypt 解密

compress 压缩

decompress 解压缩

pack 打包

unpack 解包

parse 解析

emit 生成

connect 连接

disconnect 断开

send 发送

receive 接收

download 下载

upload 上传

refresh 刷新

synchronize 同步

update 更新

revert 复原

lock 锁定

unlock 解锁

check out 签出

check in 签入

submit 提交

commit 交付

push 推

pull 拉

expand 展开

collapse 折叠

begin 起始

end 结束

start 开始

finish 完成

enter 进入

exit 退出

abort 放弃

quit 离开

obsolete 废弃

depreciate 废旧

collect 收集

aggregate 聚集

总结

命名目的都是为了让代码和工程师进行对话,增强代码的可读性,可维护性。优秀的代码往往能够见名知意。