在 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