web-dev-qa-db-ja.com

Java mapping:Selma vs MapStruct

現在、2つの主要な人気のあるJava Dozerに取って代わるオブジェクトからオブジェクトへのマッピングフレームワーク( http://dozer.sourceforge.net/documentation/mappings.html )、次のとおりです。

  1. セルマ- http://www.selma-Java.org/
  2. MapStruct- http://mapstruct.org/

このページを除く( http://vytas.io/blog/Java/java-object-to-object-mapping-which-framework-to-choose-part-2/ )Iどのフレームワークが他のフレームワークよりも優れているか、またはどのような状況で優れているかについて、オンラインで見つけることができませんでした。誰かがこれに光を当てることができるかどうか疑問に思います。ドキュメントに基づく機能の面では、彼らは同じことをしているようです。

53
JackDev

(MapStructの元の著者はここにいるので、当然私は偏っています)

実際、両方のプロジェクトは、コンパイル時にマッピングコードを生成するという同じ一般的な考え方に基づいています。次の理由から、MapStructをお勧めします。

  • 実績のある安定したコードベース:MapStructは2つのうち古いものであり、元々マッピング生成のアイデアを思いつきました。多くの異なるプロジェクトでの使用からの実際のフィードバックに基づいて、非常に長い期間にわたって強化および洗練されてきました。昨年安定版1.0 Finalをリリースしました
  • コミッター( MapStructSelma )およびユーザーの質問(- MapStructSelma =)
  • 豊富な機能(MapStructでサポートされているいくつかの機能は、セルマのドキュメントでは(同じ程度まで)見つかりませんでした):
  • Eclipseプラグイン avaible:まだ進行中ですが、マッパーインターフェイスを設計する際にそのクイックフィックスと自動補完はすでに非常に役立ちます
  • IntelliJプラグイン :自動補完を介してマッパーインターフェイスを編集するとき、参照されているプロパティに移動する、リファクタリングサポートなどに役立ちます。
78
Gunnar

(セルマの元の著者は非常にわずかな異なる視点)

SelmaとMapStructは、いくつかの違いはありますが同じ仕事をしています。最初に、Selmaで生成されたコードはMapStructよりも少し速いようです( http://javaetmoi.com/wp-content/uploads/2015/09/2015-09-mapping-objet-objet2.png =)。 0.13のリリース番号は、コードの成熟度を実際には反映していません。Selmaは安定して堅牢であり、2年間製品版で使用されています。

セルマの背後にある主なアイデアは、魔法の変換を禁止し、副作用なしですべてのマッピングを自動化することです。マッピングが複雑すぎるように見える場合、開発者はカスタムマッピングまたはインターセプターを使用して自分でマッピングを処理する必要があります。

Selmaのフットプリントは、JavaWriterとJDKにのみ依存するように、可能な限り小さくなるように構築されています。

Selmaは、実行時のリフレクションや文字列フィールドに記述された擬似コードなしで、静的にコンパイルされた生成コードのみを使用しようとします。

コンポジションを使用してマッパーのチェーンを構築し、単一のマッパー内でメソッドごとに上書きできるグローバル構成を使用できます。

コンパイラメッセージは、開発者に早期のフィードバック、問題を解決し、APIを学習するためのヒントを提供するために作成されています。

最後に、MapStructの機能が充実していることを確認しますが、Selmaは開発者に、ビジネスロジックを記述する責任を伴う複雑なマッピングに必要なすべてのツールを提供します。また、ユーザーの観点から2つのAPIの1つを見つけることができるため、両方を試して、より快適に感じるものを選択することをお勧めします。時間はかかりません。

77
slemesle