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说明了它自己 – 它用于数据存储。

  1. 因此,如果您想validation数据类,那么在构造函数的参数上设置@get: validation将会非常有意义,并且会在class中的data class之外validation,负责构造。

  2. 你的第二个选择是不使用数据类,只需使用简单的类,并在构造函数中传递validation器的整个逻辑

  3. 另外,如果你使用Spring框架 – 你可以使用这个类的Bean作为原型,但是使用这种types的意大利面代码会让人感到不舒服:)