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

时间:2015-01-07 20:39:28

标签: java design-patterns

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

    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.FAIL LogType.OLD,我们只重复了一段代码。

使这更好的最佳方法是什么?

谢谢!!!

2 个答案:

答案 0 :(得分:2)

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

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

那就是说,恕我直言,你能做的最好就是利用Factory Design Pattern来实现这个目标。

答案 1 :(得分:0)

对您当前问题的最简单解决方案是添加一个带有其他参数的重载方法:

    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
        }

    }