1

在 LosTechies 上有一个关于 AutoMapper 的非常有趣的讨论(一个支持/反对 2-way mapping 的论点)。

由于我目前正在解决的问题,这实际上引起了我的注意。我正在处理一件货件,以便向我的用户提供诸如费率/交货时间等信息。为了集中实际服务,我有一个 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 的子列表,它创建了 2 路映射场景。

这不仅仅是一个简单的 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
4

2 回答 2

1

在那篇文章中提到的我不太理解的是回复中的措辞。“传入的 DTO 映射到命令消息”。说,DTO 可以是双向的,提供的映射(AutoMapper)是单向的。

于 2009-11-10T15:27:26.393 回答
0

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

于 2009-11-09T20:14:55.143 回答