validation数据类参数Kotlin
如果我使用Kotlin数据类为我的值对象建模,那么处理validation的最佳方法是什么? 看起来像init块是唯一的逻辑地方,因为它在主构造函数之后执行。
data class EmailAddress(val address: String) { init { if (address.isEmpty() || !address.matches(Regex("^[a-zA-Z0-9]+@[a-zA-Z0-9]+(.[a-zA-Z]{2,})$"))) { throw IllegalArgumentException("${address} is not a valid email address") } } }
使用JSR-303示例
缺点是需要加载时间编织
@Configurable data class EmailAddress(@Email val address: String) { @Autowired lateinit var validator: Validator init { validator.validate(this) } }
实际上,validation看起来不是数据类的责任。 data
说明了它自己 – 它用于数据存储。
-
因此,如果您想validation数据类,那么在构造函数的参数上设置
@get:
validation将会非常有意义,并且会在class中的data class之外validation,负责构造。 -
你的第二个选择是不使用数据类,只需使用简单的类,并在构造函数中传递validation器的整个逻辑
-
另外,如果你使用Spring框架 – 你可以使用这个类的Bean作为原型,但是使用这种types的意大利面代码会让人感到不舒服:)