9

C# プロジェクトで使用されるドメイン クラスと、フラッシュ クライアントに送信されるクラスとの間でオブジェクト間のマッピングを行う必要があります。

私が最初に選んだのは Automapper でした。しかし、いくつかの問題がありました (ネストされたプロパティ、パラメーターなしのコンストラクターが定義されていません)。Automapper を使用して本当に複雑な型をマッピングするのはそれほど簡単ではないことがわかりました。

次のようなメソッドを実装してみませんか?

  ClassA GetClassAByClassB(ClassB pObj)

   {  
     ClassA objA = new ClassA();  
     objA.Prop1 = pObj.Prop1;  
     objA.NestedType.Prop2 = pObj.Prop2;  
     //....Some more.....  
     return objA;  
   }  

Automapper を使用して行うマッピングとまったく同じレベルの柔軟性があります。ソース オブジェクトのどのプロパティを宛先オブジェクトのどのプロパティにコピーするかを指定する必要があります。=ラムダ式の代わりに使用してこれを行うだけです。

しかし、ドメイン クラスで何かを変更する場合は、とにかくこの「マッピング」部分を変更する必要があります。では、リテラル マッピングよりも Automapper を使用する主な利点は何でしょうか?

4

3 に答える 3

4

AutoMapperを使用すると、これらのメソッドを実装する必要がないためです;-)

あなたのアプローチはたくさん書く必要があります

classA.propA = classB.propA;
classA.propB = classB.propB;
classA.propC = classB.propC;
classA.propD = classB.propD;
classA.propE = classB.propE;

AutoMapperは、規則を使用してそれ自体を把握します。さらに、心配する必要はありませんpObj == null(この場合はコードがスローNulLReferenceExceptionされます)。

マップで変換を定義することもできます(つまり、文字列からDateTimeへ)。

Mapper.CreateMap<User, UserModel>().ForMember(d => d.LastLogin, c => c.MapFrom<DateTime?>(u => u.Credential.LastLogin));

AutoMapperは、ネストされたプロパティもサポートします。

詳細はこちら:AutoMapperの紹介とサンプル

于 2010-10-22T11:16:57.793 に答える