java - 使用丑陋的条件语句重构方法

标签 java refactoring

我的方法很笨拙,有多个丑陋的条件语句。例如:

public String getKafkaTopicName(EvntMsg evntMsg) {
    Table table = fillerTableSection(evntMsg);
    String[] msgDetails = table.getMessageString().split("\\^");
    String topicName;
    if (("QUEUE_R".equals(table.getDeliveryChannel()) && "A".equals(msgDetails[0])) ||
            ("M".equals(table.getDeliveryChannel()) && "F".equals(msgDetails[0])) ||
            ("QUEUE_Q".equals(table.getDeliveryChannel()) && "S".equals(msgDetails[0])) ||
            ("QUEUE_W".equals(table.getDeliveryChannel()) && "S".equals(msgDetails[0])) ||
            ("QUEUE_Q".equals(table.getDeliveryChannel()) && "C".equals(msgDetails[0]) && "DD_SRC_MESS".equals(table.getCode())) ||
            ("QUEUE_Q".equals(table.getDeliveryChannel()) && "C".equals(msgDetails[0]) && "DD_TGT_MESS".equals(table.getCode()))) {
        topicName = paramsHelper.getKafkaTopicNameBalance();
    } else if (("SMS3DS_CHECK".equals(table.getDeliveryChannel())) ||
            ("SMS3DS".equals(table.getDeliveryChannel()))) {
        topicName = paramsHelper.getKafkaTopicNameOtp();
    } else if (("SBRF_I".equals(table.getDeliveryChannel()) && "I".equals(msgDetails[0])) ||
            ("SBRF_B".equals(table.getDeliveryChannel()) && "B".equals(msgDetails[0])) ) {
        topicName = paramsHelper.getKafkaTopicNameIssuing();
    } else if (("QUEUE_Q".equals(table.getDeliveryChannel()) && "C".equals(msgDetails[0]) && "C0".equals(table.getCode().substring(0, 2))) ||
            ("QUEUE_R".equals(table.getDeliveryChannel()) && "AP".equals(msgDetails[0])) ||
            ("QUEUE_D".equals(table.getDeliveryChannel()) && "AP".equals(msgDetails[0]))) {
        topicName = paramsHelper.getKafkaTopicNameNotify();
    } else {
        topicName = paramsHelper.getKafkaTopicNameUndefined();
    }
    return topicName;
}

如何修改它以提高可读性?

最佳答案

您可以做的是在返回 boolean 值的方法中进行隔离

boolean test0(Table table, String[] msgDetails){
   return "QUEUE_R".equals(table.getDeliveryChannel()) && "A".equals(msgDetails[0])) ||
            ("M".equals(table.getDeliveryChannel()) && "F".equals(msgDetails[0])) ||
            ("QUEUE_Q".equals(table.getDeliveryChannel()) && "S".equals(msgDetails[0])) ||
            ("QUEUE_W".equals(table.getDeliveryChannel()) && "S".equals(msgDetails[0])) ||
            ("QUEUE_Q".equals(table.getDeliveryChannel()) && "C".equals(msgDetails[0]) && "DD_SRC_MESS".equals(table.getCode())) ||
            ("QUEUE_Q".equals(table.getDeliveryChannel()) && "C".equals(msgDetails[0]) && "DD_TGT_MESS".equals(table.getCode()))
}

关于java - 使用丑陋的条件语句重构方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59498941/

相关文章:

java - 强制 JUnit 一次运行一个测试用例

c# - 如何重构这个重复的 LINQ 代码?

git - 如何将函数声明移动到另一个文件但保留 Git 历史记录?

javascript - 如何从外部函数中分解出一个闭包,以便在不同的上下文中重用所述闭包?

java - 为什么JFrame定义的重写的 `add`方法在JFrame的API文档中没有提到?

java - 类路径中的属性未更新

Java BigDecimal 可以用逗号代替点吗?

java - 通过反射调用@Transactional方法时未创建Spring事务

java - 如何重构这段代码?

r - 确定适当除数的算法