我在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));
答案 0 :(得分:1)
如果您编写一些DTO类来将数据从WCF转储到,那么您应该能够使用AutoMapper来处理映射。不过,我不确定为什么。是否有任何现实场景,您可以使用此应用程序,将其连接到其他服务,而不必对客户端代码进行重大更改?
如果答案是否定的,并且您的客户很好地依赖于相关服务,那么您只是在浪费能源担心它。我保证您的用户不在乎。