Kotlin データ クラスを使用して値オブジェクトをモデル化している場合、検証を処理する最適な方法は何ですか。プライマリ コンストラクターの後に実行されるため、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)
}
}
ベストアンサー1
オブジェクト作成の検証をクラス コンストラクター以外の場所で行うのは不合理に思えます。これは作成を担当する場所なので、有効なインスタンスとそうでないインスタンスを定義するルールが配置されるべき場所です。保守の観点からも、推測する必要がある場合にそのようなルールを探す場所であるため、私には理にかなっていると思います。