2016-07-05 11 views
3

私はAutoMapperでセットアップされたプロジェクトに取り組んでいます。これのほとんどは私にとって外国人なので、私はなぜかについて心を開いています。なぜ私はちょうどパラメータとしてFooViewを取るコンストラクタを使用することはありません、代わりにORMを使用してのMapper vs Constructor

class Foo 
{ 
    public string name { get; set; } 
    public int rank { get; set; } 
    public bool isDelected { get; set; } 
} 

class FooView 
{ 
    public string name { get; set; } 
    public int rank { get; set; } 
} 

はのは、私は2つのクラスがあるとしましょう。この場合

class Foo 
{ 
    public Foo(FooView source) 
    { 
     this.name = source.name; 
     this.rank = source.rank; 
    } 
} 

私はFooViewを持っていると私はちょうどそれが私に私は1つの場所で必要なすべてのロジックを与えると私はどこにでもそれを使用することができます

var myFoo = new Foo(FooView); 

を言うのFooが必要なとき。コードを更新する必要がある場合は、モデル定義と同じ場所です。それで私は何が欠けているのですか?

+1

別に私のマッピング・ロジックを保つことができますが、何もしあなたが20、30以上の特性を持っていますか? Automapperは、名前が一致する場合、これらを自動的にマッピングします。それだけで設定上のオーバーヘッドはありません。 –

+1

[Automapper](http://automapper.org/)のメリットを読んで、それを使用するかどうかを自分で決める必要があります。オートマトンのメリットの1つ(*これ以上の機能性があります)は、プロパティが全く同じシグネチャ(両方ともパブリックセッター/ゲッタを持っていなければなりません)の場合、2つのオブジェクトに値を自動的にマップできます。これは、同じタイプ(クローンのようなもの)でも、異なるタイプのものでもかまいません。これは特に、ビジネス/データロジックモデルに非常に似ている多くのビューモデルがある場合には、多くのコードを節約することができます。 – Igor

+1

私は@MattyMのように、これは大きな改善でもテスト能力と一貫性を指摘したと思います。 'AutoMapper'文書の最初の点の1つが、なぜそれを使用するのかを説明しています:) –

答えて

1

すべてのモデルが同じアセンブリに含まれているか、他のアイテムに直接依存していると、これは問題ありません。あなたのモデルがうまく整列しているなら、AutoMapperは素晴らしいですが、マッピングを少しだけコントロールする必要がある場合は、これらを専用ヘルパーまたはMVCコントローラ内の静的マッピングメソッドに入れてしまう傾向があります。

これは、あなたがこれを行うことができモデル

private static Foo MapToFoo(FooView vm) 
{ 
    var foo = new Foo(); 
    foo.Name = vm.Name; 
    foo.Rank = vm.Rank; 
    ... 
    return foo; 
} 
関連する問題