検証データクラスパラメータ Kotlin 質問する

検証データクラスパラメータ Kotlin 質問する

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

オブジェクト作成の検証をクラス コンストラクター以外の場所で行うのは不合理に思えます。これは作成を担当する場所なので、有効なインスタンスとそうでないインスタンスを定義するルールが配置されるべき場所です。保守の観点からも、推測する必要がある場合にそのようなルールを探す場所であるため、私には理にかなっていると思います。

おすすめ記事