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,
});