一部の「データ」クラス オブジェクトを同様の「データ」クラス オブジェクトに変換/マッピングしたいと考えています。たとえば、Web フォームのクラスからデータベース レコードのクラスへ。
data class PersonForm(
val firstName: String,
val lastName: String,
val age: Int,
// maybe many fields exist here like address, card number, etc.
val tel: String
)
// maps to ...
data class PersonRecord(
val name: String, // "${firstName} ${lastName}"
val age: Int, // copy of age
// maybe many fields exist here like address, card number, etc.
val tel: String // copy of tel
)
私は Java でこのような作業に ModelMapper を使用していますが、データ クラスが final であるため使用できません (ModelMapper はマッピング定義を読み取るために CGLib プロキシを作成します)。これらのクラス/フィールドを開くときに ModelMapper を使用できますが、「データ」クラスの機能を手動で実装する必要があります。(参照。ModelMapper の例: https://github.com/jhalterman/modelmapper/blob/master/examples/src/main/java/org/modelmapper/gettingstarted/GettingStartedExample.java )
Kotlinでそのような「データ」オブジェクトをマッピングする方法は?
更新: ModelMapper は、マッピング宣言なしで、同じ名前 (tel -> tel など) を持つフィールドを自動的にマップします。Kotlinのデータクラスでやりたい。
更新: 各クラスの目的はアプリケーションの種類によって異なりますが、これらはおそらくアプリケーションの別のレイヤーに配置されます。
例えば:
- データベース(Database Entity)からHTMLフォーム用データ(Model/View Model)へ
- データベースのデータへの REST API の結果
これらのクラスは似ていますが、同じではありません。
これらの理由から、通常の関数呼び出しを避けたい:
- 引数の順序によって異なります。同じ型 (文字列など) を持つ多くのフィールドを持つクラスの関数は、簡単に壊れてしまいます。
- ほとんどのマッピングは命名規則で解決できますが、多くの宣言が必要です。
もちろん同様の機能を持ったライブラリを想定していますが、Kotlinの機能の情報も歓迎です(ECMAScriptで拡散するなど)。