gpt4 book ai didi

java - 在多次 if 调用的情况下更好的重构技术

转载 作者:行者123 更新时间:2023-12-01 20:22:09 25 4
gpt4 key购买 nike

我有 AuditLog 实体类,我使用基于 LogType 枚举的 insertAuditLogs 方法使用多个 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 如何使用 Replace Method with Method Object 或 Extact to a Class or a Parameter Object 来重构上述调用并改进重构?

最佳答案

我不确定您提到的重构模式如何适用于这种情况,但在我看来(?)您的 if block 的主体都是相同的。如果您的实际应用程序是这种情况,您应该能够简化为:

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)

希望这有帮助!

关于java - 在多次 if 调用的情况下更好的重构技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44557078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com