複数のデータクラスで実装するコンストラクタ引数を共通化する方法の相談

実現したいこと

現在kotlin + Spring bootで個人開発をしており、ログイン機能を作成するにあたってそのapiのリクエストモデルの作成で一点ご相談があります。
apiのリクエストモデルにcreateUserRequestloginRequestがあり、両方とも共通したコンストラクタ引数にvalidation付きのuserNamepasswordを持っています。しかし、createUserRequestはもう一つdisplayNameというコンストラクタ引数を持っているので、1つのモデルに統合することはできません。
そこで、userに関する共通のリクエストパラメータであるuserNamepasswordは切り出して共通化させたいと思い、UserRequestBaseというインターフェースを作成しました。

発生している問題・分からないこと

data classのコンストラクタの共通方法がはたして良い方法であるかを確認していただきたいです。

該当のソースコード

Kotlin

1// import以上は略2 3interface UserRequestBase {4 @get:NotNull(message = "入力は必須です")5 @get:Length(min = 8, max = 16, message = "8文字以上16文字以下です")6 @get:Pattern(regexp = """^[a-z\d_]+$""", message = "半角小文字、数字、_で記述してください")7 @get:Pattern(regexp = """^(?=.*[a-z])(?=.*\d)[a-z\d_]{2,}$""", message = "半角小文字、数字を必ず1文字以上含んでください")8 @get:JsonProperty("user_name", required = true)9 val userName: String?10 get() = null11 12 @get:NotNull(message = "入力は必須です")13 @get:Length(min = 8, max = 16, message = "8文字以上16文字以下です")14 @get:Pattern(regexp = """^[\w&&[^_]]+$""", message = "半角大小文字、数字で記述してください")15 @get:Pattern(16 regexp = """^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[\w&&[^_]]{3,}$""",17 message = "半角大小文字、数字の全てを1文字以上含んでください"18 )19 @get:JsonProperty("password", required = true)20 val password: String?21 get() = null22}

試したこと・調べたこと

上記の詳細・結果

調べてみたのですが、バリデーションを持ったプロパティをinterfaceに実装してdata classのコンストラクタに実装するという手法をとっている方は見受けられなかったので、ぜひお聞きしたいです。

補足

特になし

コメントを投稿

0 コメント