前言
业务开发目前对于绝大多数的程序员接触最基本的就是简单,复杂的业务开发,绝大部分的公司都是业务驱动型公司,因此业务开发的过程中会存在很多很奇怪的需求,本篇博文会长期记录在业务开发过程中自己总结的一些常用开发技巧或者心得体会.
- IDEA
- MacOs/Windows
- Git
优化
场景1
当调用第三方接口,同步合同状态的时候,但我们对外输入的时候需要按照其他状态进行转化几个其他的外部状态,由于很多时候需要两个状态枚举值之间可以互相转换,其实就是两个不同的枚举值进行转化建立一个mapping关系;
public class CaseStatusConverter {
private static final Map<OutCaseStatusEnum, CaseStatusEnum> statusMap = Maps.newEnumMap(OutCaseStatusEnum.class);
static {
statusMap.put(OutCaseStatusEnum.UNCOMMITTED, CaseStatusEnum.UNCOMMITTED);
statusMap.put(OutCaseStatusEnum.COMMITTING, CaseStatusEnum.PROCESSING);
statusMap.put(OutCaseStatusEnum.COMMITTED, CaseStatusEnum.PROCESSING);
statusMap.put(OutCaseStatusEnum.PRE_QUALIFIED, CaseStatusEnum.PROCESSING);
statusMap.put(OutCaseStatusEnum.NOT_PAID, CaseStatusEnum.PROCESSING);
statusMap.put(OutCaseStatusEnum.ALREADY_PAID, CaseStatusEnum.PROCESSING);
statusMap.put(OutCaseStatusEnum.ALREADY_INITIATED, CaseStatusEnum.PROCESSING);
statusMap.put(OutCaseStatusEnum.IN_PROCESS, CaseStatusEnum.PROCESSING);
statusMap.put(OutCaseStatusEnum.FINISHED, CaseStatusEnum.FINISHED);
statusMap.put(OutCaseStatusEnum.ALREADY_ARCHIVED, CaseStatusEnum.FINISHED);
statusMap.put(OutCaseStatusEnum.COMMIT_ERROR, CaseStatusEnum.WITHDRAWN_REJECTED);
statusMap.put(OutCaseStatusEnum.WITHDRAWN, CaseStatusEnum.WITHDRAWN_REJECTED);
statusMap.put(OutCaseStatusEnum.REJECTED, CaseStatusEnum.WITHDRAWN_REJECTED);
}
public static CaseStatusEnum convertCaseStatus(OutCaseStatusEnum outCaseStatus) {
return statusMap.get(outCaseStatus);
}
}
OutCaseStatusEnum对应的状态值为从三方获取的状态值,而CaseStatusEnum对应对外使用的案件状态,在需要转化的地方可以直接使用类中静态方法进行转换;类比当需要此类转换的时候都可以采用这种方式进行转换;
场景2
在业务开发的过程进行需要的各个实体类之间转换,Entity转换成Bo,或者Bo转换成VO对象,此类博文比较多,关于这里就给出平时使用比较简单的转换方式,主要依赖org.springframework.beans.BeanUtils
进行属性复制,这里使用主要依赖两者对象属性名称存在差异较小;
public class EntityUtils {
public static <T> T convert(Object source, Class<T> targetClass) {
if (source == null) {
return null;
}
T target = null;
try {
target = targetClass.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}
BeanUtils.copyProperties(source, target);
return target;
}
public static <T> List<T> convertList(List<? extends Object> sources,
Class<T> targetClass) {
if (CollectionUtils.isEmpty(sources)) {
return null;
}
List<T> targets = new ArrayList<T>();
for (Object source : sources) {
T target = null;
try {
target = targetClass.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
BeanUtils.copyProperties(source, target);
targets.add(target);
}
return targets;
}
public static <T> List<T> convertListEmpty(List<? extends Object> sources,
Class<T> targetClass) {
if (CollectionUtils.isEmpty(sources)) {
return new ArrayList<T>();
} else {
return convertList(sources, targetClass);
}
}
}
具体使用的过程中使用直接使用该类中静态方法,但是这里提别提醒:source
必须不能为空,业务操作需要进行非空判断;
public CaseBo basicInfo(String uid, Long caseId) {
log.info("获取案件基础信息,uid:{},caseId:{}", uid, caseId);
CaseEntity caseEntity = caseEntityMapper.selectByIdAndUid(caseId, uid);
if (caseEntity == null) {
return null;
} else {
return EntityUtils.convert(caseEntity, CaseBo.class);
}
}
场景三
在业务开发的过程中需要针对各种状态来判断用户是否有业务权限操作,例如删除合同,撤销案件等业务场景,这样在的每个业务场景需要校验权限的地方需要写很多重复代码,这样不如依靠在按照状态进行区分,分割成不同List
使用List
中方法contains
进行业务权限判断:
public static boolean isCanWithdrawn(String outCaseStatusEnum) {
List<String> canWithdrawnList = new ArrayList<>();
canWithdrawnList.add(OutCaseStatusEnum.UNCOMMITTED.name());
canWithdrawnList.add(OutCaseStatusEnum.COMMITTING.name());
canWithdrawnList.add(OutCaseStatusEnum.COMMITTED.name());
canWithdrawnList.add(OutCaseStatusEnum.PRE_QUALIFIED.name());
canWithdrawnList.add(OutCaseStatusEnum.NOT_PAID.name());
return canWithdrawnList.contains(outCaseStatusEnum);
}
public static boolean isCanFinished(String outCaseStatusEnum) {
List<String> canFinishedList = new ArrayList<>();
canFinishedList.add(OutCaseStatusEnum.FINISHED.name());
canFinishedList.add(OutCaseStatusEnum.ALREADY_ARCHIVED.name());
canFinishedList.add(OutCaseStatusEnum.WITHDRAWN.name());
canFinishedList.add(OutCaseStatusEnum.REJECTED.name());
return canFinishedList.contains(outCaseStatusEnum);
}
public static boolean isArbitrationAccepted(String outCaseStatusEnum) {
List<String> arbitrationAcceptedList = new ArrayList<>();
arbitrationAcceptedList.add(OutCaseStatusEnum.PRE_QUALIFIED.name());
arbitrationAcceptedList.add(OutCaseStatusEnum.NOT_PAID.name());
return arbitrationAcceptedList.contains(outCaseStatusEnum);
}
public static boolean isArbitrationRegistration(String outCaseStatusEnum) {
List<String> arbitrationRegistrationList = new ArrayList<>();
arbitrationRegistrationList.add(OutCaseStatusEnum.ALREADY_PAID.name());
arbitrationRegistrationList.add(OutCaseStatusEnum.ALREADY_INITIATED.name());
return arbitrationRegistrationList.contains(outCaseStatusEnum);
}
public static boolean isArbitrationFinished(String outCaseStatusEnum) {
List<String> arbitrationFinishedList = new ArrayList<>();
arbitrationFinishedList.add(OutCaseStatusEnum.ALREADY_PAID.name());
arbitrationFinishedList.add(OutCaseStatusEnum.ALREADY_INITIATED.name());
return arbitrationFinishedList.contains(outCaseStatusEnum);
}
这里主要是使用List
中方法contains
进行代码小小的优化,消除冗余重复的代码;
结语
以上只是在工作过程发现比较好代码结构,好的优化方法,在这里记录一下,可能代码结构很简单,有的时候只是一个很好的优化就会改变一个复杂的代码结构,代码看起来比较干净,好的代码写的会像诗一样的完美,这里只是简单总结还有很多待总结,持久更新…
关于我
Hello,我是球小爷,热爱生活,求学七年,工作三载,而今已快入而立之年,如果您觉得对您有帮助那就一切都有价值,赠人玫瑰,手有余香❤️. 最后把我最真挚的祝福送给您及其家人,愿众生一生喜悦,一世安康!