2012-03-05 10 views
2

私は、Orderを表すフラットDTOを受け取るWebサービスを使用しています。私は、このフラット表現に注文のビジネス表現を変換する必要があります。
dtodtoから多形ビジネスオブジェクトへの変換

ビジネス・オブジェクト:
business object

今の質問はどのように私は私のOrderエンティティを変換するんです。ここ
は、Objects(オブジェクト)
DTOですか?私は2つの可能な解決策を考えることができ

  1. OrderがDTOとして自分自身を表現する方法を知っている:OrderDTO dto = order.ToDto();
    しかし、これはデータ表現を知っている企業体の明らかな欠点があります。

  2. Convertor:OrderDTO dto = Convertor.Convert(order);の何らかの種類でこれを実行しましたか。
    しかし、コンバータ・コードは次のようになりなければならない:(順序はOnlineOrderある)
    {
    dto.Email =((OnlineOrder)順).Email場合


    } これはもちろん恐ろしいです。

automapperはここで助けてもいいですか(私はそれに本当に精通していません)?

答えて

1

"Converter"とは基本的には、工場を探しています。あなたはそれにいくつかの異なる方法をimplimentできる工場内

var factory = new OrderDTOFactory(); 
OrderDTO orderDTO = factory.CreateOrder(order); 

:あなたのコードは次のようになります。あなたのDTOはそれほど大きくはありませんが、Automapperはここで役に立つかもしれません。 Automapperは、移転する必要のある多くのプロパティを持つオブジェクトに対して、私にとって最も役立っています。

あなたの「コンバータ」コードは本当にひどいとは思わない。非常に拡張性はありませんが、読みやすいです。しかし、サブクラスの量がかなり静的であれば、これは本当に問題ではありませんか?あなたのクラスが特定の方法を持っているかどうか、もっと細かいことが分からない場合は、他のどのようなことが分かるかわかりません。

+0

ビジネスオブジェクトのあなたのセットは、あなたにも、このように、インタフェース「IORDER」を抽出かもしれませんが、OrderDTOあるDTOの正確に一つのクラスに対応している場合: 'パブリック抽象クラスご注文はIORDERすべて{' 宣言を実装階層の一番下にある抽象クラスを除いて抽象クラスをサブクラス化します。この方法で、すべての欠落したフィールドのゲッタとセッタを提供することができます。次に、インターフェイスにバインドされたゲッターからすべてのフィールドをDTOのセッターにコピーするcreateOrderメソッドを作成することができます。 –