From fe3dc9e8bbfc91d696ddf8927bff5472a4fe7c1c Mon Sep 17 00:00:00 2001 From: adiao <1819192616@qq.com> Date: Sun, 9 Apr 2023 05:31:09 +0800 Subject: [PATCH] Updated files --- 项目命名/项目命名格式.md | 288 ++++++++++++++--------------- 1 file changed, 144 insertions(+), 144 deletions(-) diff --git a/项目命名/项目命名格式.md b/项目命名/项目命名格式.md index 449d3be..2b4c377 100644 --- a/项目命名/项目命名格式.md +++ b/项目命名/项目命名格式.md @@ -3,125 +3,125 @@ 一,Java 中的命名规范 好的命名能体现出代码的特征,含义或者是用途,让阅读者可以根据名称的含义快速厘清程序的脉络。不同语言中采用的命名形式大相径庭,Java 中常用到的命名形式共有三种,既首字母大写的 UpperCamelCase,首字母小写的 lowerCamelCase 以及全部大写的并用下划线分割单词的 UPPER_CAMEL_UNSER_SCORE。通常约定,类一般采用大驼峰命名,方法和局部变量使用小驼峰命名,而大写下划线命名通常是常量和枚举中使用。 -类型 约束 例 -项目名 全部小写,多个单词用中划线分隔‘-’ spring-cloud -包名 全部小写 com.alibaba.fastjson -类名 单词首字母大写 Feature, ParserConfig,DefaultFieldDeserializer -变量名 首字母小写,多个单词组成时,除首个单词,其他单词首字母都要大写 password, userName -常量名 全部大写,多个单词,用’_'分隔 CACHE_EXPIRED_TIME -方法 同变量 read(), readObject(), getById() +类型 约束 例 +项目名 全部小写,多个单词用中划线分隔‘-’ spring-cloud +包名 全部小写 com.alibaba.fastjson +类名 单词首字母大写 Feature, ParserConfig,DefaultFieldDeserializer +变量名 首字母小写,多个单词组成时,除首个单词,其他单词首字母都要大写 password, userName +常量名 全部大写,多个单词,用’_'分隔 CACHE_EXPIRED_TIME +方法 同变量 read(), readObject(), getById() 二,包命名 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英文单词或者多个单词自然连接到一块(如 springframework,deepspace 不需要使用任何分割)。包名统一使用单数形式,如果类命有复数含义,则可以使用复数形式。 包名的构成可以分为以下几四部分【前缀】 【发起者名】【项目名】【模块名】。常见的前缀可以分为以下几种: -前缀名 例 含义 -indi(或 onem ) indi.发起者名.项目名.模块名.…… 个体项目,指个人发起,但非自己独自完成的项目,可公开或私有项目,copyright 主要属于发起者。 -pers pers.个人名.项目名.模块名.…… 个人项目,指个人发起,独自完成,可分享的项目,copyright 主要属于个人 -priv priv.个人名.项目名.模块名.…… 私有项目,指个人发起,独自完成,非公开的私人使用的项目,copyright 属于个人。 -team team.团队名.项目名.模块名.…… 团队项目,指由团队发起,并由该团队开发的项目,copyright 属于该团队所有 -顶级域名 com.公司名.项目名.模块名.…… 公司项目,copyright 由项目发起的公司所有 +前缀名 例 含义 +indi(或 onem ) indi.发起者名.项目名.模块名.…… 个体项目,指个人发起,但非自己独自完成的项目,可公开或私有项目,copyright 主要属于发起者。 +pers pers.个人名.项目名.模块名.…… 个人项目,指个人发起,独自完成,可分享的项目,copyright 主要属于个人 +priv priv.个人名.项目名.模块名.…… 私有项目,指个人发起,独自完成,非公开的私人使用的项目,copyright 属于个人。 +team team.团队名.项目名.模块名.…… 团队项目,指由团队发起,并由该团队开发的项目,copyright 属于该团队所有 +顶级域名 com.公司名.项目名.模块名.…… 公司项目,copyright 由项目发起的公司所有 三,类命名 类名使用大驼峰命名形式,类命通常时名词或名词短语,接口名除了用名词和名词短语以外,还可以使用形容词或形容词短语,如 Cloneable,Callable 等,表示实现该接口的类有某种功能或能力。对于测试类则以它要测试的类开头,以 Test 结尾,如 HashMapTest。 对于一些特殊特有名词缩写也可以使用全大写命名,比如 XMLHttpRequest,不过笔者认为缩写三个字母以内都大写,超过三个字母则按照要给单词算。这个没有标准如阿里巴巴中 fastjson 用 JSONObject 作为类命,而 google 则使用 JsonObjectRequest 命名,对于这种特殊的缩写,原则是统一就好。 -属性 约束 例 -抽象类 Abstract 或者 Base 开头 BaseUserService -枚举类 Enum 作为后缀 GenderEnum -工具类 Utils 作为后缀 StringUtils -异常类 Exception 结尾 RuntimeException -接口实现类 接口名+ Impl UserServiceImpl -领域模型相关 /DO/DTO/VO/DAO 正例:UserDAO 反例:UserDo, UserDao -设计模式相关类 Builder,Factory 等 当使用到设计模式时,需要使用对应的设计模式作为后缀,如 ThreadFactory -处理特定功能的 Handler,Predicate, Validator 表示处理器,校验器,断言,这些类工厂还有配套的方法名如 handle,predicate,validate -测试类 Test 结尾 UserServiceTest, 表示用来测试 UserService 类的 -MVC 分层 Controller,Service,ServiceImpl,DAO 后缀 UserManageController,UserManageDAO +属性 约束 例 +抽象类 Abstract 或者 Base 开头 BaseUserService +枚举类 Enum 作为后缀 GenderEnum +工具类 Utils 作为后缀 StringUtils +异常类 Exception 结尾 RuntimeException +接口实现类 接口名+ Impl UserServiceImpl +领域模型相关 /DO/DTO/VO/DAO 正例:UserDAO 反例:UserDo, UserDao +设计模式相关类 Builder,Factory 等 当使用到设计模式时,需要使用对应的设计模式作为后缀,如 ThreadFactory +处理特定功能的 Handler,Predicate, Validator 表示处理器,校验器,断言,这些类工厂还有配套的方法名如 handle,predicate,validate +测试类 Test 结尾 UserServiceTest, 表示用来测试 UserService 类的 +MVC 分层 Controller,Service,ServiceImpl,DAO 后缀 UserManageController,UserManageDAO 四,方法 方法命名采用小驼峰的形式,首字小写,往后的每个单词首字母都要大写。和类名不同的是,方法命名一般为动词或动词短语,与参数或参数名共同组成动宾短语,即动词 + 名词。一个好的函数名一般能通过名字直接获知该函数实现什么样的功能。 4.1 返回真伪值的方法 注:Prefix-前缀,Suffix-后缀,Alone-单独使用 -位置 单词 意义 例 -Prefix is 对象是否符合期待的状态 isValid -Prefix can 对象能否执行所期待的动作 canRemove -Prefix should 调用方执行某个命令或方法是好还是不好,应不应该,或者说推荐还是不推荐 shouldMigrate -Prefix has 对象是否持有所期待的数据和属性 hasObservers -Prefix needs 调用方是否需要执行某个命令或方法 needsMigrate +位置 单词 意义 例 +Prefix is 对象是否符合期待的状态 isValid +Prefix can 对象能否执行所期待的动作 canRemove +Prefix should 调用方执行某个命令或方法是好还是不好,应不应该,或者说推荐还是不推荐 shouldMigrate +Prefix has 对象是否持有所期待的数据和属性 hasObservers +Prefix needs 调用方是否需要执行某个命令或方法 needsMigrate 4.2 用来检查的方法 -单词 意义 例 -ensure 检查是否为期待的状态,不是则抛出异常或返回 error code ensureCapacity -validate 检查是否为正确的状态,不是则抛出异常或返回 error code validateInputs +单词 意义 例 +ensure 检查是否为期待的状态,不是则抛出异常或返回 error code ensureCapacity +validate 检查是否为正确的状态,不是则抛出异常或返回 error code validateInputs 4.3 按需求才执行的方法 -位置 单词 意义 例 -Suffix IfNeeded 需要的时候执行,不需要的时候什么都不做 drawIfNeeded -Prefix might 同上 mightCreate -Prefix try 尝试执行,失败时抛出异常或是返回 errorcode tryCreate -Suffix OrDefault 尝试执行,失败时返回默认值 getOrDefault -Suffix OrElse 尝试执行、失败时返回实际参数中指定的值 getOrElse -Prefix force 强制尝试执行。error 抛出异常或是返回值 forceCreate, forceStop +位置 单词 意义 例 +Suffix IfNeeded 需要的时候执行,不需要的时候什么都不做 drawIfNeeded +Prefix might 同上 mightCreate +Prefix try 尝试执行,失败时抛出异常或是返回 errorcode tryCreate +Suffix OrDefault 尝试执行,失败时返回默认值 getOrDefault +Suffix OrElse 尝试执行、失败时返回实际参数中指定的值 getOrElse +Prefix force 强制尝试执行。error 抛出异常或是返回值 forceCreate, forceStop 4.4 异步相关方法 -位置 单词 意义 例 -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 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 4.5 回调方法 -位置 单词 意义 例 -Prefix on 事件发生时执行 onCompleted -Prefix before 事件发生前执行 beforeUpdate -Prefix pre 同上 preUpdate -Prefix will 同上 willUpdate -Prefix after 事件发生后执行 afterUpdate -Prefix post 同上 postUpdate -Prefix did 同上 didUpdate -Prefix should 确认事件是否可以发生时执行 shouldUpdate +位置 单词 意义 例 +Prefix on 事件发生时执行 onCompleted +Prefix before 事件发生前执行 beforeUpdate +Prefix pre 同上 preUpdate +Prefix will 同上 willUpdate +Prefix after 事件发生后执行 afterUpdate +Prefix post 同上 postUpdate +Prefix did 同上 didUpdate +Prefix should 确认事件是否可以发生时执行 shouldUpdate 4.6 操作对象生命周期的方法 -单词 意义 例 -initialize 初始化。也可作为延迟初始化使用 initialize -pause 暂停 onPause ,pause -stop 停止 onStop,stop -abandon 销毁的替代 abandon -destroy 同上 destroy -dispose 同上 dispose +单词 意义 例 +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 +单词 意义 例 +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 4.8 与数据相关的方法 -单词 意义 例 -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 +单词 意义 例 +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 ##### 4.9 成对出现的动词 @@ -130,60 +130,59 @@ reset 清除数据或是恢复到初始状态 resetAll | get 获取 | set 设置 | add 增加 | remove 删除 | create 创建 | destory 移除 -| start 启动 |stop 停止 -| open 打开 | close 关闭 +| 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 离开 +| 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 聚集 - #### 五,变量&常量命名 ##### 5.1 变量命名 @@ -303,7 +302,8 @@ c. 属性注解 /** 提示信息 */ private String userName; /** - * 密码 + +* 密码 */ private String password; 1 @@ -319,7 +319,7 @@ d. 方法注释 /** * 方法的详细说明,能干嘛,怎么实现的,注意事项... * - * @param xxx 参数1的使用说明, 能否为null + * @param xxx 参数1的使用说明, 能否为null * @return 返回结果的说明, 不同情况下会返回怎样的结果 * @throws 异常类型 注明从此类方法中抛出异常的说明 */ @@ -332,7 +332,7 @@ e. 构造方法注释 /** * 构造方法的详细说明 * - * @param xxx 参数1的使用说明, 能否为null + * @param xxx 参数1的使用说明, 能否为null * @throws 异常类型 注明从此类方法中抛出异常的说明 */ ``` @@ -356,4 +356,4 @@ String name; ``` 总结 -无论是命名和注解,他们的目的都是为了让代码和工程师进行对话,增强代码的可读性,可维护性。优秀的代码往往能够见名知意,注解往往是对命名的补充和完善。命名太南了! \ No newline at end of file +无论是命名和注解,他们的目的都是为了让代码和工程师进行对话,增强代码的可读性,可维护性。优秀的代码往往能够见名知意,注解往往是对命名的补充和完善。命名太南了!