java - 重构嵌套的 if 语句

标签 java if-statement nested refactoring

我正在尝试重构一些与下面的代码类似的代码。我觉得应该有一种更简单的方法来完成它的工作。我主要关心的是 (!dataA.isEmpty()) 条件的 if 和 else block 中对 getDataB() 的调用。

    DataA dataA = getDataA();

    if (!dataA.isEmpty()) {

        if (dataA.getStatus() == Status.FINAL) {
            // process finalized dataA
        }

        if (dataA.getStatus() == Status.RECEIVED) {
            DataB dataB = getDataB();
            if (!dataB.isEmpty()) {
                dataA.setStatus(dataB.getStatus());
                // process dataA with updated status from dataB
            }
        }

        if (dataA.getStatus() == STATUS.IN_PROGRESS) {
            // process in progress dataA
        }

    // empty dataA
    } else {
        Datab dataB = getDataB();
        if (!dataB.isEmpty()) {
            // process dataB
        }
    }

最佳答案

仍有改进的空间,但作为初始重构,您可以执行以下操作:

// I like to get rid of the negations, assuming that DataA and DataB are your objects.
// I would normally declare a method with more meaning, like hasData(), otherwise just use the negation and the isEmpty.

DataA dataA = getDataA();
DataB dataB = getDataB();

// When DataA has data
if (dataA.hasData()) {  
    Status statusA = dataA.getStatus(); 

    switch(statusA) {
        case Status.FINAL:
            // process finalized dataA
            break;
        case Status.RECEIVED:
            if (dataB.hasData()) {
                dataA.setStatus(dataB.getStatus());
                // process dataA with updated status from dataB
            }
            break; // If you want to process dataA in progress after setting the dataB status in A, then remove this break.
        case Status.IN_PROGRESS:
            // process in progress dataA
            break;          
    }

// When DataB has data
} else if (dataB.hasData()) {
    // process dataB
}

关于java - 重构嵌套的 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57699161/

相关文章:

MySQL:在 SELECT 语句中使用 IF 条件比较日期

algorithm - 用线性供应流中的值填充嵌套结构

sql-server - SQL Server 嵌套事务

java - 使用java解析文件 "/etc/default"

java - toString() 方法问题

java - 子字符串范围 (Java)

c# - 如果/如果否则/否则

Excel嵌套IF函数,3例

python - 使用字符串列表构建嵌套字典

java - 优化大表上的 MySQL 查询