DTO /命令模式问题

时间:2009-11-09 20:02:18

标签: c# automapper dto

关于LosTechies regarding AutoMapper(an argument for/against 2-way mapping).

的讨论非常有趣

由于我目前正在解决的问题,这实际引起了我的注意。我正在处理一件货件,以便向我的用户提供费率/交货时间等信息。为了集中实际的服务,我有一个WCF Web服务,它可以保留任何域实体。

为了简化域模型,我基本上有两个类:

public class Shipment
{
 public IList<Item> Items{get;set;}
}

public class Item
{
 //some primitive properties
}

我还有一组相应的DTO,用于减轻电线上的负载。演示文稿(或者无论是什么触及Web服务)都使用DTO而不了解域模型。

我的问题来了。要创建货件,该服务接受一个项目列表。创建货件有逻辑,这些都隐藏在Web服务之后。实质上,这意味着ItemDTO通过线路(客户端 - >服务器)传递,发货,然后传回ShipmentDTO(服务器 - &gt;客户端)。现在,ShipmentDTO也有ItemDTO的子列表,它创建了双向映射方案。

这不仅仅是一个简单的CRUD操作,而且我对命令消息模式很新,所以我很好奇社区将如何解决这个问题。

您是否通过双向映射双向传递DTO?

样本用法(表示层):

List<ItemDTO> list = new List<ItemDTO>();
//add items to list


ShipmentServiceClient client = new ShipmentServiceClient();
List<ShipmentDTO> shipments = client.GetShipments(list);

//shipments are now displayed to the user
//with respective costs and other useful data

2 个答案:

答案 0 :(得分:1)

在那篇文章中提到的我没有完全掌握的东西是答复中的措辞。 “传入的DTO映射到命令消息”。说,DTO可以是双向的,但提供的映射(AutoMapper)是单向的。

答案 1 :(得分:0)

冒着错过问题的风险,我会说只要你没有因错误的原因重新使用DTO,双向使用DTO是可以的。在您的情况下,请求服务器为一堆项目创建一个货物,完全填充每个ItemDTO,以便当服务器取回它时,ItemDTOs基本相同?或者,您是否真的要求运送多件物品,但是返回的ItemDTO还有一些服务器填写的其他详细信息(例如每件物品运费,库存状态等)?如果是后一种情况,我会说你不应该重复使用ItemDTO来表示要求装运的特定物品和有关物品的运输细节。