20

Automapperの目的は何ですか?

ドメインとコントローラー層 (asp.net mvc) でどのように役立ちますか?

4

3 に答える 3

31

ここで例が役立つかもしれません...

次のような適切に正規化されたデータベース スキーマがあるとします。

注文 (OrderID、CustomerID、OrderDate)  
顧客 (顧客 ID、名前)  
OrderDetails (OrderDetID、OrderID、ProductID、Qty)  
製品 (ProductID、ProductName、UnitPrice)  

そして、よく組織化されたドメイン モデルを返す素晴らしい O/R マッパーを使用しているとしましょう。

注文詳細
+--ID
+--注文
|--+--日付
|--+--顧客
|-----+--ID
|-----+--名前
+--製品
|--+--ID
|--+--名前
|--+--単価
+--数量

ここで、先月注文されたものすべてを表示する必要があります。これをフラット グリッドにバインドしたいので、バインドするフラット クラスを忠実に記述します。

public class OrderDetailDto
{
    public int ID { get; set; }
    public DateTime OrderDate { get; set; }
    public int OrderCustomerID { get; set; }
    public string OrderCustomerName { get; set; }
    public int ProductID { get; set; }
    public string ProductName { get; set; }
    public Decimal ProductUnitPrice { get; set; }
    public int Qty { get; set; }

    public Decimal TotalPrice
    {
        get { return ProductUnitPrice * Qty; }
    }
}

これまでのところ、それはかなり痛みがありませんでしたが、今はどうですか?データバインディングのためOrderDetailに、 の束を の束に変えるにはどうすればよいでしょうか?OrderDetailDto

を受け取るコンストラクターを配置しOrderDtoOrderDetailマッピング コードを大量に作成する場合があります。または、静的変換クラスがどこかにあるかもしれません。または、AutoMapper を使用して、代わりに次のように記述できます。

Mapper.CreateMap<OrderDetail, OrderDetailDto>();
OrderDetailDto[] items =
    Mapper.Map<OrderDetail[], OrderDetailDto[]>(orderDetails);
GridView1.DataSource = items;

そこには。無意味なマッピング コードのうんざりするようなごちゃまぜになっていたものを、3 行に減らしました (実際のマッピングでは、実際には 2 行だけです)。

それは目的を説明するのに役立ちますか?

于 2010-01-19T04:06:19.797 に答える
3

あるタイプのオブジェクトがあり、最初のタイプのプロパティを使用して別のタイプのオブジェクトのプロパティを設定する場合は、次の 2 つの選択肢があります。

  1. このようなマッピングを行うコードを手動で記述します。
  2. これを自動的に処理するツールを使用してください。

AutoMapper は 2 の例です。

最も一般的な用途は、モデルをデータ転送オブジェクトにフラット化することです (または、一般に、レイヤーの境界を越えてマッピングします)。AutoMapper の非常に優れた点は、一般的なシナリオでは構成を行う必要がないことです (構成よりも規約)。

于 2010-01-19T03:54:38.343 に答える
0

レイヤー間でオブジェクトをマップします。良い例:ここ

于 2010-01-19T03:55:59.867 に答える