如果多次调用,则更好的重构技术

时间:2017-06-15 01:22:43

标签: java

我有AuditLog实体类,使用基于LogType枚举的insertAuditLogs方法保存到DB,使用多个if调用

private void processData(LogData logObj, LogType type)
{
    if (type.toString().equalsIgnoreCase(LogType.LOG1_PROCESSING.toString()))
    {   
            AuditLog audObj = new AuditLog();
            audObj.setImportId(logObj.id);
            audObj.setLogMessage(logObj.description);
            audObj.setEntryDateTimestampJoda(null);
            audObj.setExitDateTimestampJoda(logObj.getExitDateTime());
            insertAuditLogs(audObj);
    }

    if (type.toString().equalsIgnoreCase(LogType.LOG2_PROCESSING.toString()))
    {   
            AuditLog audObj = new AuditLog();
            audObj.setImportId(logObj.id);
            audObj.setLogMessage(logObj.description);
            audObj.setEntryDateTimestampJoda(logObj.getStartDateTime());
            audObj.setExitDateTimestampJoda(logObj.getExitDateTime());
            insertAuditLogs(audObj);
    }



}

问题

1如何将替换方法与方法对象或Extact一起用于类或参数对象以重构上述调用并改进重构?

1 个答案:

答案 0 :(得分:3)

我不确定你提到的重构模式在这种情况下是如何应用的,但它看起来像我(?),就像if块的主体一样。如果您的实际应用程序就是这种情况,您应该能够简化为:

private void processData(LogData logObj, LogType type) {
    AuditLog audObj = new AuditLog();
    audObj.setImportId(logObj.id);
    audObj.setLogMessage(logObj.description);
    audObj.setEntryDateTimestampJoda(logObj.getStartDateTime());
    audObj.setExitDateTimestampJoda(logObj.getExitDateTime());
    insertAuditLogs(audObj);
}

但如果有其他LogType值未显示您不想记录,我想您需要过滤掉这些值。

此外,如果您仍需要这样做,这里有一种更简单的比较enum值的方法:

if (type == LogType.LOG2_PROCESSING)

希望这有帮助!