将参数设置为对象并避免重复代码的最佳做法是什么?
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 个属性:fileSize
、fileHeight
、file
、logStatus
和 logType
。让我们假设 LogStatus.SUCESS
和 LogType.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
}
}
我在一个有一些实体的项目中工作,为了设置实体属性,我们有很多这样的代码:
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 个属性:fileSize
、fileHeight
、file
、logStatus
和 logType
。让我们假设 LogStatus.SUCESS
和 LogType.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
}
}