消息关闭
    暂无新消息!
处理流程是一致的,传入参数不太一致,里面所使用的checkBlazeRule/checkWhiteList/checkBlackList/checkDecisionRule分别是两个方法各自的实现。请问这种的如何合并以消除冗余代码?

public Map<String, Object> checkApply(String accountId, String idNumber,
String name, String cellPhone, String channelSource,
String directApply) {
Map<String, Object> result = new HashMap<>();
try {
checkBlazeRule(idNumber, result);
} catch (Exception e) {
updateOPenAccountResult(accountId, "RULE_FAIL_BLAZE");
}

if ("success".equals(result.get("msg").toString())) {
try {
checkWhiteList(idNumber, result, channelSource);
} catch (Exception e) {
updateOPenAccountResult(accountId, "RULE_FAIL_WHITELIST");
}
log.info(idNumber + "白名单规则结果:" + result.get("msg").toString());
}

if ("success".equals(result.get("msg").toString())) {
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("idNumber", idNumber);
paramMap.put("productFlag", result.get("productFlag").toString());
paramMap.put("mobile", cellPhone);
paramMap.put("name", name);
paramMap.put("reqId", accountId);
paramMap.put("lastLoanProduct", result.get("lastloansource")
.toString());
try {
checkDecisionRule(paramMap, result);
} catch (Exception e) {
updateOPenAccountResult(accountId, "RULE_FAIL_GH");
}
}

if ("success".equals(result.get("msg").toString()))
try {
checkBlackList(idNumber, result);
} catch (Exception e) {
updateOPenAccountResult(accountId, "RULE_FAIL_BLACK");
}

if (!"success".equals(result.get("msg").toString()))
handleRuleResult(Long.valueOf(accountId), result, directApply);

result.remove("scorepank");
result.remove("syscode");
return result;
}


public RuleRetVo callRule(String idNumber, String name, String phone,
String transportId) {
RuleRetVo ruleRetVo = new RuleRetVo();
StringBuffer productFlag = new StringBuffer();
StringBuffer lastloansource = new StringBuffer();
ruleRetVo.setStatus("success");
ruleRetVo.setNeedIncome("false");
try {
checkBlazeRule(idNumber, ruleRetVo);
} catch (Exception e) {
log.info("blaze规则调用失败:", e);
}

if ("success".equals(ruleRetVo.getStatus())) {
try {
checkWhiteList(idNumber, ruleRetVo, productFlag, lastloansource);
} catch (Exception e) {
log.info("白名单规则调用失败:", e);
}
}

if ("success".equals(ruleRetVo.getStatus())) {
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("idNumber", idNumber);
paramMap.put("productFlag", productFlag.toString());
paramMap.put("lastLoanProduct", lastloansource.toString());
paramMap.put("mobile", phone);
paramMap.put("name", name);
paramMap.put("reqId", transportId);
try {
checkDecisionRule(paramMap, ruleRetVo);
} catch (Exception e) {
log.info("归户规则调用失败:", e);
}
}

if ("success".equals(ruleRetVo.getStatus())) {
try {
checkBlackList(idNumber, ruleRetVo);
} catch (Exception e) {
log.info("黑名单规则调用失败:", e);
}
}
return ruleRetVo;
}

2个回答

︿ 1
要抽象的话,首先得知道你的业务逻辑,其次你起码两段代码整理的尽可能接近吧,以及,你这有些调用名字相同,但参数不同,也得跟着合并。不是光看你这段代码就能知道怎么合并的。如果是参数相同的,用自己定义一个 interface 然后去做不同实现就行了。
package com.java.test;

public class DummyMethod {
public interface Animal {
public void speak();
}
public static class Horse implements Animal {
@Override
public void speak() {
System.out.println("I'm a horse.");
}
}
public static class Sheep implements Animal {
@Override
public void speak() {
System.out.println("I'm a sheep.");
}
}
public static class Person implements Animal {
@Override
public void speak() {
System.out.println("I'm a person.");
}
}
public static Horse  horse  = new Horse();
public static Sheep  sheep  = new Sheep();
public static Person person = new Person();
public static void AnimalSpeak(Animal animal) {
animal.speak();
}
public static void main(String[] args) {
AnimalSpeak(horse);
AnimalSpeak(sheep);
AnimalSpeak(person);
    }
}