常见代码重构技巧( 四 )


项目名
全部小写,多个单词用中划线分隔‘-’
-cloud
包名
全部小写
com..
类名/接口名
单词首字母大写
,izer
变量名
首字母小写,多个单词组成时,除首个单词,其他单词首字母都要大写
,
常量名
全部大写,多个单词,用'_'分隔
方法
同变量
read(), (), ()
类命名
类名使用大驼峰命名形式,类命通常使用名词或名词短语 。接口名除了用名词和名词短语以外,还可以使用形容词或形容词短语,如 ,等,表示实现该接口的类有某种功能或能力 。
场景约束示例
抽象类
或者 Base 开头
枚举类
Enum 作为后缀
工具类
Utils 作为后缀
异常类
结尾
接口实现类
接口名+ Impl
设计模式相关类
,等
当使用到设计模式时,需要使用对应的设计模式作为后缀,如
处理特定功能的类
,,
表示处理器,校验器,断言,这些类工厂还有配套的方法名如 ,,
特定层级的类
,,,Dao 后缀
, ,
特定层级的值对象
Ao, Param, Vo,,
Param调用入参;Ao为返回结果;Vo通用值对象;
配置类;为MQ消息
测试类
Test 结尾
,表示用来测试类的
方法命名
方法命名采用小驼峰的形式,首字小写,往后的每个单词首字母都要大写 。和类名不同的是,方法命名一般为动词或动词短语,与参数或参数名共同组成动宾短语,即动词 + 名词 。一个好的函数名一般能通过名字直接获知该函数实现什么样的功能 。
场景约束示例
返回真伪值
is/can/has/needs/
/
用于检查
/
/
按需执行
/try//
//
数据相关
get//save///
/
///
/ime
生命周期
/pause/stop/
/pause//stop/
常用动词对
split/join、/、bind/、
/、lanch/run、/、build/、
/、/、push/pull、enter/exit、
/、/
重构技巧 提炼方法
多个方法代码重复、方法中代码过长或者方法中的语句不在一个抽象层级 。
方法是代码复用的最小粒度,方法过长不利于复用,可读性低,提炼方法往往是重构工作的第一步 。
意图导向编程:把处理某件事的流程和具体做事的实现方式分开 。
/** * 1、交易信息开始于一串标准ASCII字符串 。* 2、这个信息字符串必须转换成一个字符串的数组,数组存放的此次交易的领域语言中所包含的词汇元素(token) 。* 3、每一个词汇必须标准化 。* 4、包含超过150个词汇元素的交易,应该采用不同于小型交易的方式(不同的算法)来提交,以提高效率 。* 5、如果提交成功,API返回”true”;失败,则返回”false” 。*/public class Transaction {public Boolean commit(String command) {Boolean result = true;String[] tokens = tokenize(command);normalizeTokens(tokens);if (isALargeTransaction(tokens)) {result = processLargeTransaction(tokens);} else {result = processSmallTransaction(tokens);}return result;}}复制代码
以函数对象取代函数
将函数放进一个单独对象中,如此一来局部变量就变成了对象内的字段 。然后你可以在同一个对象中将这个大型函数分解为多个小型函数 。
引入参数对象
方法参数比较多时,将参数封装为参数对象

常见代码重构技巧

文章插图
移除对参数的赋值
public int discount(int inputVal, int quantity, int yearToDate) {if (inputVal > 50) inputVal -= 2;if (quantity > 100) inputVal -= 1;if (yearToDate > 10000) inputVal -= 4;return inputVal;}public int discount(int inputVal, int quantity, int yearToDate) { int result = inputVal;if (inputVal > 50) result -= 2; if (quantity > 100) result -= 1; if (yearToDate > 10000) result -= 4; return result; }复制代码