idea将代码块抽取为⽅法快捷键
前⾔
遇到业务逻辑很复杂的模块,有时候⼀个⽅法⼀写就好⼏百⾏。这个时候很多代码可以抽成⼀个⽅法,从⽽使业务逻辑很复杂的⽅法变得易读。当然,你必须要在关键的地⽅写上注释,⽅便后⾯的⼈维护。
Idea提供了⼀个抽取功能,可以将变量、代码块等抽取出来,减少重复代码,提⾼代码可读性。
⽤来重构代码,⾮常⽅便快捷。开发效率也会提⾼!!
具体操作
抽取⽅法的快捷键是 Ctrl + Alt + M,其中 M 代表 Method,即⽅法。
以下代码分别演⽰了抽取前,抽取后的变化,可以看出抽取后的代码结构更清晰简单,阅读性更好。
提取前:
// ⼤转盘设置某⽤户下次必中某商品
public void updateTurntableNextAward(Integer userId, Integer awardId, HttpServletRequest request){
//验证奖品
BsTurntableAward award = turntableAwardMapper.selectByPrimaryKey(awardId);
if(award == null){
throw new BusiException(E.INVALID_PARAMETER,"奖品不存在");
}
State()!=1){
throw new BusiException(E.INVALID_PARAMETER,"奖品已停售");
}
Jedis jedis = Jedis();
SysUser sysUser =(SysUser) Session().getAttribute(R.LOGIN_USER);
try{
if(jedis.hexists(Rkey.USER_INFO, String())){
String hget = jedis.hget(Rkey.TURNTALE_NEXT_AWARD, String());
if(StringUtils.isEmpty(hget)){
//第⼀次设置
BsTurntableNextAward record =new BsTurntableNextAward();
record.setAwardId(awardId);
record.setState(0);
record.setUserId(userId);
record.UserName());
turntableNextAwardMapper.insert(record);
//修改必中商品的已抽取库存总量:extractAmount + 1
turntableAwardMapper.updateExtractAmountAddOneByAwardId(awardId);
//新增操作,redis 对应商品总投放量加⼀
jedis.hincrBy(Rkey.BRANCH_AWARD_ACTIVE_STOCK, String(),1);
//操作数据库商品对应投放库存加⼀
//下⾯这部分可以抽取为1个⽅法,选中这部分,按下快捷键 Ctrl + Alt + M,填写⽅法名称即可抽取
Date now =new Date();
String formatDate = DateUtil.formatDate(now,"yyyy-MM-dd HH:mm");
BsTurntableActivity nowPeriodActivity = turntableActivityMapper.queryNowPeriodActivity(formatDate);
String curActivityId = Id().toString();
BsTurntableActivity turntableActivity =new BsTurntableActivity();
turntableActivity.setId(curActivityId;
AwardId1().equals(awardId)){
turntableActivity.Amount1()+1);
}else AwardId2().equals(awardId)){
turntableActivity.Amount2()+1);
}else AwardId3().equals(awardId)){
turntableActivity.Amount3()+1);
}else AwardId4().equals(awardId)){
turntableActivity.Amount4()+1);
}else AwardId5().equals(awardId)){
turntableActivity.Amount5()+1);
turntableActivity.Amount5()+1);
}else AwardId6().equals(awardId)){
turntableActivity.Amount6()+1);
}
}else{
//替换操作
Integer oldAwardId = Integer.valueOf(hget);
// 查询⽤户是否有没有抽取的必中记录
BsTurntableNextAward record = turntableNextAwardMapper.queryDataByUserAndState(userId,0);
if(record != null){
record.setAwardId(awardId);
record.UserName());
turntableNextAwardMapper.updateByPrimaryKeySelective(record);
//修改之前设置的必中商品已抽取库存总量:extractAmount - 1
turntableAwardMapper.updateExtractAmountReduceOneByAwardId(oldAwardId);
//修改必中商品的已抽取库存总量:extractAmount + 1
turntableAwardMapper.updateExtractAmountAddOneByAwardId(awardId);
}
//更新替换操作,原有商品总投放量减⼀
jedis.hincrBy(Rkey.BRANCH_AWARD_ACTIVE_STOCK, String(),-1);
//更新替换操作,替换商品总投放量加⼀
jedis.hincrBy(Rkey.BRANCH_AWARD_ACTIVE_STOCK, String(),1);
}
jedis.hset(Rkey.TURNTALE_NEXT_AWARD, String(), String());idea的快捷键
//数据库
}else{
throw new BusiException(E.CUSTOM_ERROR_MSG,"⽤户不存在");
}
}finally{
}
}
抽取之后,代码如下:
public void updateTurntableNextAward(Integer userId, Integer awardId, HttpServletRequest request){
/
/验证奖品
BsTurntableAward award = turntableAwardMapper.selectByPrimaryKey(awardId);
if(award == null){
throw new BusiException(E.INVALID_PARAMETER,"奖品不存在");
}
State()!=1){
throw new BusiException(E.INVALID_PARAMETER,"奖品已停售");
}
Jedis jedis = Jedis();
SysUser sysUser =(SysUser) Session().getAttribute(R.LOGIN_USER);
try{
if(jedis.hexists(Rkey.USER_INFO, String())){
String hget = jedis.hget(Rkey.TURNTALE_NEXT_AWARD, String());
if(StringUtils.isEmpty(hget)){
//第⼀次设置
BsTurntableNextAward record =new BsTurntableNextAward();
record.setAwardId(awardId);
record.setState(0);
record.setUserId(userId);
record.UserName());
turntableNextAwardMapper.insert(record);
//修改必中商品的已抽取库存总量:extractAmount + 1
turntableAwardMapper.updateExtractAmountAddOneByAwardId(awardId);
turntableAwardMapper.updateExtractAmountAddOneByAwardId(awardId);
//新增操作,redis 对应商品总投放量加⼀
jedis.hincrBy(Rkey.BRANCH_AWARD_ACTIVE_STOCK, String(),1);
//操作数据库商品对应投放库存加⼀
//下⾯这部分可以抽取为1个⽅法,选中这部分,按下快捷键 Ctrl + Alt + M,填写⽅法名称即可抽取
updateAmountAddOneWhenSettingBizhong(awardId);
}else{
//替换操作
Integer oldAwardId = Integer.valueOf(hget);
// 查询⽤户是否有没有抽取的必中记录
BsTurntableNextAward record = turntableNextAwardMapper.queryDataByUserAndState(userId,0);
if(record != null){
record.setAwardId(awardId);
record.UserName());
turntableNextAwardMapper.updateByPrimaryKeySelective(record);
//修改之前设置的必中商品已抽取库存总量:extractAmount - 1
turntableAwardMapper.updateExtractAmountReduceOneByAwardId(oldAwardId);
//修改必中商品的已抽取库存总量:extractAmount + 1
turntableAwardMapper.updateExtractAmountAddOneByAwardId(awardId);
}
//更新替换操作,原有商品总投放量减⼀
jedis.hincrBy(Rkey.BRANCH_AWARD_ACTIVE_STOCK, String(),-1);
//更新替换操作,替换商品总投放量加⼀
jedis.hincrBy(Rkey.BRANCH_AWARD_ACTIVE_STOCK, String(),1);
}
jedis.hset(Rkey.TURNTALE_NEXT_AWARD, String(), String());
//数据库
}else{
throw new BusiException(E.CUSTOM_ERROR_MSG,"⽤户不存在");
}
}finally{
}
}
// 操作数据库设置必中对应商品库存加⼀
private void updateAmountAddOneWhenSettingBizhong(Integer awardId){
Date now =new Date();
String formatDate = DateUtil.formatDate(now,"yyyy-MM-dd HH:mm");
BsTurntableActivity nowPeriodActivity = turntableActivityMapper.queryNowPeriodActivity(formatDate);
String curActivityId = Id().toString();
BsTurntableActivity turntableActivity =new BsTurntableActivity();
turntableActivity.setId(curActivityId);
AwardId1().equals(awardId)){
turntableActivity.Amount1()+1);
}else AwardId2().equals(awardId)){
turntableActivity.Amount2()+1);
}else AwardId3().equals(awardId)){
turntableActivity.Amount3()+1);
}else AwardId4().equals(awardId)){
turntableActivity.Amount4()+1);
}else AwardId5().equals(awardId)){
turntableActivity.Amount5()+1);
}else AwardId6().equals(awardId)){
turntableActivity.Amount6()+1);
}
turntableActivityMapper.updateByPrimaryKeySelective(turntableActivity);
}
ps:
1.选中要提取的部分,按下快捷键 Ctrl + Alt + M,填写⽅法名称即可抽取
2.有可能提取的时候,提取的参数不够(不满⾜我们的期望),可以等提取结束后⼿动修改,加⼊需要的参数。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论