ベストプラクティス:ドメイン モデルとプレゼンテーション モデル間のマッピングに AutoMapper または LINQ (LINQ to Objects) を使用する場合の長所と短所
-
26-09-2019 - |
質問
どう思いますか?ドメインとプレゼンテーション モデルをどのようにマッピングしますか?
解決
からの回答の一部を引用すると、 オートマッパーの別の質問:
あるタイプのオブジェクトがあり、最初のタイプのプロパティを使用して別のタイプのオブジェクトのプロパティを設定する場合は、次の 2 つの選択肢があります。
- このようなマッピングを行うためにコードを手動で書き込みます。
- これを自動的に処理するツールを使用してください。
AutoMapper は 2 の例です。
LINQ to Objects は 1 の例です。これは、バニラのオブジェクト対オブジェクト マッピング コードを記述するよりも、たまたま手間が少し少ないだけです。
長所と短所の観点から:
Automapper は、既定のマッピングを決定するために規則を使用するため、LINQ と比較して、記述しなければならないコードの量が大幅に削減されます。LINQ を使用すると、これらのデフォルトのマッピングを定義する必要があります。
LINQ を使用すると、両方向のマッピングを定義する必要があります。規約が使用されている場合、Automapper はこれを自動的に解決できるはずです。
すべてのサードパーティ DLL と同様に、Automapper を使用すると別の依存関係が導入され、少しの学習曲線が必要になります (これまで LINQ を使用したことがない開発者にとっても同様に学習曲線が必要になることに注意してください)。
Automapper は LINQ (および LINQ2SQL) と組み合わせて使用できることに注意してください。 さらに別の Automapper の投稿 いくつかの細かい点を説明します。
他のヒント
また、AutomApperを使用する際には欠点があり、これらの欠点の一部は一般に、コードを明示的に記述するのではなく)とは対照的にプログラミングに適用されます。
2つのC#クラスがあるとします -
namespace MyDtoNamespace {
public class MyClass {
public int Id { get; set; }
}}
namespace MyBusinessLayerNamespace {
public class MyClass {
public int Id { get; set; }
}}
AutomApperは、これら2つのクラスの間でうまくマッピングされ、明示的な構成はほとんど必要ありません。
しかし、後で、開発者がこれらのIDプロパティのいずれかを異なるものに変更することを考慮しているとします。
namespace MyBusinessLayerNamespace {
public class MyClass {
public int MyNewIdentifierVariableName { get; set; }
}}
Visual Studioで参照を慎重に検索し、これらの参照に対する名前変更の影響を検討しますが、mydtonamespace.myclass.idはMybusinesslayernamespace.myclass.idを明示的に参照していないため、見かけません。
Visual Studioまたは別のツールが、ソリューションでの変数のすべての発生を自動的に変更すると、AutomApperマッピングが破損します。
実行時にのみこれを見つけることができます。コンパイル時間の問題はありません。理想的には、マッピングの動作を確認するための単体テストがありますが、それでも、リファクタリング中の実行時間エラーの可能性は、明示的なマッピングコードを作成する正当な理由です。
私は確かに自動車を完全に避けることを主張していませんが、慣習によるプログラミングの大きな問題に注目しています。
http://bhavinsurela.com/linq-and-automapper-view-model-and-data-model/ あなたが探しているものかもしれません。