我有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一起用于类或参数对象以重构上述调用并改进重构?
答案 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)
希望这有帮助!