代码之家  ›  专栏  ›  技术社区  ›  Alexis Abril

DTO/命令模式问题

  •  1
  • Alexis Abril  · 技术社区  · 16 年前

    有一个非常有趣的讨论 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也有一个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 回复  |  直到 16 年前
        1
  •  1
  •   Alexis Abril    16 年前

    在那篇文章中提到的一些我不太明白的地方是回复中的措辞。”传入的DTO映射到命令消息”。也就是说,DTO可以是双向的,但是所提供的映射(automapper)是单向的。

        2
  •  0
  •   Trinition    16 年前

    冒着错过问题要点的风险,我想说,只要你没有因为错误的原因而使用DTO,就可以双向使用DTO。在您的情况下,请求服务器为一堆完全填充每个itemdto的项目创建一个装运,这样当服务器取回它时,itemdto基本上是相同的吗?或者,您是否真的请求装运多个项目,但返回的项dto有一些由服务器填写的附加详细信息(例如,每个项目的装运成本、库存状态等)?如果是后一种情况,我想说您不应该重复使用item t来表示正在请求装运的特定项目和有关项目的装运详细信息。

    推荐文章