在验证DTO中的字段时,如何避免重复的if-else?

时间:2019-03-13 16:58:47

标签: java lambda

StudentDTO类具有大约20个字符串属性,每个类都需要根据以下注释中给出的逻辑来验证是否强制性。这将使更新方法冗长,否则将过多。异常消息应基于属性评估而更改。这段代码使用Java 11。

<code grabbed using "Get Specified Text" followed by a
Variable
. And now some more text and another 
Variable
.>

2 个答案:

答案 0 :(得分:1)

似乎您正在验证对象。

我不会分享任何代码示例,我只会分享设计意见。顺便说一下,在设计应用程序时,您应该遵循设计原则。因此SOLID design principles是普遍接受的,您可以在设计应用程序时将这些原理应用于您的应用程序。

您可以创建一个类似#DATA set.seed(122) df1 = data.frame(id = rep(1:3, each = 3), partcipant = paste0("s", 1:9), stringsAsFactors = FALSE) do.call(rbind, lapply(split(df1$partcipant, df1$id), function(x) data.frame(from = x[1], to = x[-1], stringsAsFactors = FALSE))) # from to #1.1 s1 s2 #1.2 s1 s3 #2.1 s4 s5 #2.2 s4 s6 #3.1 s7 s8 #3.2 s7 s9 的类,因此它的工作必须仅是验证StudentValidator对象。这样您就实现了Solid的单一责任的首要原则。

该StudentValidator类还将具有您需要进行验证的方法。在完成所有这些实现之后,您可以为每种验证提供一个方法,也可以在需要时调用它们。

还有许多设计模式可以通过实现模式来避免Student语句。像命令模式,使用枚举等。

答案 1 :(得分:0)

我强烈建议使用Java环境JSR 303 Bean验证。javax.validation包为开发人员提供了标准化的方式。必须满足某些条件的字段会收到相应的注释,例如@NotNull,然后由框架对其进行评估。自然,为了检查更具体的条件,可以创建自定义注释和验证器。

您可以参考此https://dzone.com/articles/bean-validation-made-simple