1

非常に異なる 2 つのモデルがある場合、Auto MapperValue Injecterなどのマッピング フレームワークを使用することさえ目的に反していませんか?

たとえば、構造的に同一の 2 つのモデルがあるとしますが、すべてのプロパティ名が異なるため、すべての慣習的なロジックが役に立たなくなります。これらの 2 つのモデルを手動でマッピングすることに固執するのも同じことですか?

私は主に理解しようとしていると思います:

1) マッピング フレームワークを使用する利点はありますか? 慣例によるマッピングから得られるコードの節約以外に何か利点はありますか?

2) マッピング フレームワークで上記のシナリオのマッピングを設定する方が、この場合手動でマッピングするよりも簡単ですか? (そうでもないようです。)

4

2 に答える 2

1

1) マッピング フレームワークを使用する利点はありますか? 慣例によるマッピングから得られるコードの節約以外に何か利点はありますか?

そう思います。それはそれらの1回限りの種類のものの1つです。もちろん、あるオブジェクトから別のオブジェクトへ手動で DTO を実行するコードを作成することもできます。おそらく、すべてのカスタム マッピング ルールを作成するのと同じくらいの速さです。しかし、2 回目の DTO が必要な場合は、マッピング フレームワークを使用するだけで元が取れます。

2) マッピング フレームワークで上記のシナリオのマッピングを設定する方が、この場合手動でマッピングするよりも簡単ですか? (そうでもないようです。)

ほぼ同じだと思います:

Mapper.CreateMap<EntityModel, ViewModel()
    .ForMember(d => d.Prop1, o => o.MapFrom(s => s.Property1))
    .ForMember(d => d.Prop2, o => o.MapFrom(s => s.Property2))
    .ForMember(d => d.Prop3, o => o.MapFrom(s => s.Property3))
        ...
    .ForMember(d => d.PropN, o => o.MapFrom(s => s.PropertyN))
;

このマッピングにより、すべての DTO コードは次のようになります。

var model = Mapper.Map<ViewModel>(entityInstance);

...対...手動で編集すると、私にはほぼ同じように見えます:

var model = new ViewModel
{
    Prop1 = entityInstance.Property1,
    Prop2 = entityInstance.Property2,
    Prop3 = entityInstance.Property3,
        ...
    PropN = entityInstance.PropertyN,
};

ValueInjecter に対する AutoMapper のもう 1 つの優れた点は、1 つのマッピングを定義するだけでよく、単一インスタンスとコレクションの両方のマッピングに使用できることです。

var models = Mapper.Map<ViewModel[]>(entityInstances);

... 対

var models = entityInstances.Select(new ViewModel
{
    Prop1 = entityInstance.Property1,
    Prop2 = entityInstance.Property2,
    Prop3 = entityInstance.Property3,
        ...
    PropN = entityInstance.PropertyN,
});
于 2012-06-27T18:20:11.357 に答える
0

たとえば、構造的には同じであるが、すべてのプロパティ名が異なる 2 つのモデルがあるとします。

ビューモデルを設計しているのはあなたです=>それらを完全に制御できます(たとえば、デザイナーによってデータベースまたは何かから自動生成されるドメインモデルとは対照的です)=>それに応じてプロパティに名前を付けることができます:-)

于 2012-06-27T18:19:41.213 に答える