2009-11-09 90 views
1

有上LosTechies regarding AutoMapper(an argument for/against 2-way mapping).DTO /命令模式问题

其实,这引起了我的注意一个非常有趣的讨论,因为我目前正在通过的问题。我正在制作一个装运件,为我的用户提供诸如费率/交付时间等信息。为了集中实际服务,我有一个WCF Web服务,它保留了任何域实体。

为了简化域模型我基本上有2类:

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

public class Item 
{ 
//some primitive properties 
} 

我也有被创建减轻通过线路负载的DTO的对应集。演示文稿(或多个部分,无论是否触及Web服务)都使用不知道域模型的DTO。

我的问题来到这里。要创建货件,该服务接受项目列表。创建出货的逻辑是全部隐藏在Web服务的后面。实质上,这意味着ItemDTO通过线路(客户端 - >服务器)传递,货件被创建,然后ShipmentDTO被传回(服务器 - >客户端)。现在,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 

回答

1

在那篇文章中提到的一些我不太明白的东西是回复中的措词。 “传入的DTO被映射到命令消息”。说,DTO可以是双向的,但映射(AutoMapper)提供,但是是单向的。

0

在缺少了你的问题点的风险,我会说,这是确定使用DTO双向,只要你不会因错误的原因重新使用DTO。在你的情况下,是否要求服务器创建一批物品以满足每个ItemDTO的需求,这样当服务器恢复时,ItemDTO基本上是相同的?或者,您是否确实要求发送多件商品,但返回的ItemDTO是否包含服务器填写的一些额外详细信息(例如,按项目运费,库存状态等)?如果是后一种情况,我会说你不应该重复使用ItemDTO来表示要求装运的特定物品和物品的运输细节。

+0

ItemDTO实际上由客户端填充(或选择)。 ShipmentDTO是携带成本等的东西,由服务器填充。我的问题是由AutoMapper讨论引起的,使用单向映射似乎是最佳实践,因为总是有一种方法可以避免双向排序。 – 2009-11-09 20:20:37