WCF通过ViewModel外观ASP.NET解耦

时间:2011-05-17 07:59:15

标签: asp.net wcf viewmodel automapper presentation

我在C#中使用了几个ASP.NET 4,WCF服务,并希望了解将我的代码与WCF结构分离的最佳方法。如果这不是太多的工作,因为客户可能不在乎。

我创建了一个Facade层,因此我的WebForms UI可以使用平面简单类型(如string,int和datetime)与它交谈。 Facade生成并读取WCF所需的请求/响应对象。我读取了Response对象并将其转换为一个更简单的Presentation对象供客户端使用。但是,Response对象返回一些复杂的对象类型,例如OrderHistory,它包含OrderItem,它本身包含例如OrderItem。邮寄地址。

现在我应该将所有这些复杂对象重新创建为视图吗?即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));

1 个答案:

答案 0 :(得分:1)

如果您编写一些DTO类来将数据从WCF转储到,那么您应该能够使用AutoMapper来处理映射。不过,我不确定为什么。是否有任何现实场景,您可以使用此应用程序,将其连接到其他服务,而不必对客户端代码进行重大更改?

如果答案是否定的,并且您的客户很好地依赖于相关服务,那么您只是在浪费能源担心它。我保证您的用户不在乎。