将参数设置为对象并避免重复代码的最佳做法是什么?

What is the best practice to set parameters to object and avoid duplicated code?

我在一个有一些实体的项目中工作,为了设置实体属性,我们有很多这样的代码:

    public void recordLogFile(int fileSize, int fileHeight, Long idFile) {

    try {

        LogFileEntity logEntity = new LogFileEntity();
        logEntity.setFileSize(fileSize);
        logEntity.setFileHeight(fileHeight);
        logEntity.setFile(FileEntity.find(idFile));
        logEntity.setStatus(LogStatus.SUCESS);
        logEntity.setType(LogType.NORMAL);
        logEntity.persist();

    } catch (Exception e) {
        some log code
    }

}

有很多类需要持久化日志文件实体,但在某些情况下我们在属性上有不同的值。例如LogStatus.FAILLogType.OLD,我们有一段重复的代码只是改变了值。

改善这一点的最佳方法是什么?

谢谢!!!

你可以做几件事。最简单的事情是创建使用默认值构建的对象,并提供构造函数来填充其余部分。例如,您有此 class LogFileEntity,它似乎有 5 个属性:fileSizefileHeightfilelogStatuslogType。让我们假设 LogStatus.SUCESSLogType.NORMAL 是默认值。如果您在 LogFileEntity 中设置这些值,客户端将不必一直设置它们。您的 class 构造函数可能如下所示:

public LogFileEntity()
{
    logStatus = LogStatus.SUCESS;
    logType = LogType.NORMAL;
    // Maybe set other default values
}

就是说,您能做的最好的事情就是利用 Factory Design Pattern 来实现它。

解决您眼前问题的最简单方法是添加一个采用附加参数的重载方法:

    public void recordLogFile(int fileSize, int fileHeight, Long idFile) {
        recordLogFile(fileSize, fileHeight, idFile, LogStatus.SUCESS, LogType.NORMAL);
    }

    public void recordLogFile(int fileSize, int fileHeight, Long idFile,
        LogStatus status, LogType type) {

        try {

            LogFileEntity logEntity = new LogFileEntity();
            logEntity.setFileSize(fileSize);
            logEntity.setFileHeight(fileHeight);
            logEntity.setFile(FileEntity.find(idFile));
            logEntity.setStatus(status);
            logEntity.setType(type);
            logEntity.persist();

        } catch (Exception e) {
            // some log code
        }

    }