1

C# でいくつかの ASP.NET 4、WCF サービスを使用しており、コードを WCF 構造から分離する最良の方法を知りたいです。クライアントはおそらく気にしないので、これがそれほど多くの作業ではない場合。

ファサード レイヤーを作成して、Web フォームの UI が string、int、datetime などのフラットで単純な型を使用して対話できるようにしました。ファサードは、WCF が必要とする要求/応答オブジェクトを生成して読み取ります。Response オブジェクトを読み取り、クライアントが使用できるように、より単純な Presentation オブジェクトに変換します。ただし、Response オブジェクトは、たとえば DeliveryAddress を含む OrderItem を含む OrderHistory など、いくつかの複雑なオブジェクト タイプを返します。

これらすべての複雑なオブジェクトをビューとして再作成する必要がありますか? つまり、OrderPresentation には IEnumerable-OrderHistoryView- が含まれ、これには IEnumerable-OrderItemView- が含まれ、DeliveryAddressView が含まれますか、これを誤解していますか?

より単純なオブジェクトのいくつかについては、AutoMapper を使用できましたが、ネストされた複雑なオブジェクトに適用する方法や適用する必要があるかどうかはわかりません。デカップリングをあまり気にせず、ファサード オブジェクトとプレゼンテーション オブジェクトを WCF モデルにバインドするだけでよいでしょうか。

助けてください?これに関する良いチュートリアルの例はありますか?

私はどこかに行きます:

        public static IList<OrderHistoryView> ConvertToOrderHistoryView(this OrderHistory[] orderHistory)
    {
        return Mapper.Map<OrderHistory[], IList<OrderHistoryView>>(orderHistory);
    }

            Mapper.CreateMap<OrderHistory, OrderHistoryView>()
            .ForMember(dest => dest.Items, opt => opt.MapFrom(src => src.Items));
4

1 に答える 1

1

WCFからデータをダンプするDTOクラスを作成する場合は、AutoMapperを使用してマッピングを処理できるはずです。でも、理由はよくわかりません。このアプリを使用して別のサービスに接続し、クライアントコードに大幅な変更を加える必要がないという現実的なシナリオはありますか?

答えが「いいえ」で、クライアントが問題のサービスにかなり依存している場合は、それを心配してエネルギーを浪費しているだけです。私はあなたのユーザーが気にしないことを保証します。

于 2011-05-17T12:05:40.857 に答える