ModelMapperはJava Beans (Pojo) を別の表現に変換するオブジェクト間マッピングフレームワークだ。これは「設定より規約」というアプローチによって、異なるオブジェクトのマッピングを自動化すると同時に、特殊なケースには進んだ機能を提供できる。これは.NETのAutoMapperライブラリに似ている(だが直接移植したものではない)。
非常にコンパクトなコードでシンプルな場合には、ModelMapperは設定なしに、Javaオブジェクトを別のものにマップできる。これは以下をサポートしている。
- 名前ベースのオブジェクトプロパティのマッピング
- public、protected、privateフィールドのコピー
- 特定フィールドのスキップ
- マッピングに影響を与えるコンバータ(例えば、文字列を小文字に変換するなど)
- 異なる型のフィールド間のマッピング(例えば、文字列から数値)
- 条件付きのマッピング
- デフォルトでは不十分な場合の緩いマッピング戦略
- マッピング処理の検証により、すべてのフィールドが説明できる
- 特殊なケースにおける、マッピング処理の完全カスタムコントロール
- GuiceやSpringとのインテグレーション
あるオブジェクトから別の表現に変換するというのは、エンタープライズアプリケーションでよく見かけるパターンだ。例えば、データベースからロードしたドメインオブジェクトは、GUIとしてユーザに表示する必要がある。もともとのデータベース形式のオブジェクトには、そのライフサイクルに必要なプロパティが多数含まれている。しかし、ユーザにとって関心があるのは、各画面に1つ、2つのフィールドだけだろう。したがって、データベースで使われるPojo(JPAエンティティ)は、GUIで使われるPojoとは少し異なる場合が多い。これがModelMapperが解決しようとする問題だ。一般的に、オブジェクト変換は、エンタープライズアプリケーションのレイヤー間で情報を交換するときに発生する。
オブジェクト変換には他にも次のようなシナリオがある。
- 複数のオブジェクトをひとつのオブジェクトに集約する
- 既存のオブジェクトに追加のメタデータを計算して付与する
- 外部システムに送信するためにオブジェクトを変換する
- 未定義のプロパティをデフォルト値で埋める
- 既存のプロパティをある方法で変換する(オブジェクトを自分自身にマッピングする)
ModelMapperはMaven Centralから利用可能だ。詳しくはユーザガイドとJavadocを参照。ソースコードはGitHubにある。
Kostis Kapelonis氏 : エンタープライズアプリケーションを専門とするソフトウェアエンジニア。