从dto转换为多态业务对象

时间:2012-03-05 15:14:12

标签: c# dto

我正在使用Web服务接收代表订单的平面DTO,我必须将订单的业务表示转换为此平面表示。
这是对象 -
DTO:
dto

业务对象:
business object

现在的问题是如何转换我的Order实体?
我可以想到两种可能的解决方案:

  1. Order知道如何将自己表示为DTO:OrderDTO dto = order.ToDto();
    但这有明显的缺点,即业务实体知道数据表示。

  2. 通过某种转换器完成此操作:OrderDTO dto = Convertor.Convert(order); 但转换器代码必须如下所示:

    if(order is OnlineOrder)
    {
      dto.Email =((OnlineOrder)命令).Email;
    } 当然,这很可怕。

  3. 有什么建议吗?可以在这里自动化帮助(我真的不熟悉它)?

1 个答案:

答案 0 :(得分:1)

您正在寻找一家工厂,这本质上就是您的“转换器”。您的代码看起来像:

var factory = new OrderDTOFactory();
OrderDTO orderDTO = factory.CreateOrder(order);

在工厂内,您可以通过几种不同的方式来实现它。尽管你的DTO不是很大,但Automapper在这里可能很有用并且是值得考虑的事情。对于具有许多需要传输的属性的对象,Automapper对我来说非常有用。

我不认为你的“转换器”代码真的那么糟糕。它易于阅读,但不是很容易阅读。但是如果子类的数量非常静态,那么这不是一个真正的问题吗?我不知道你怎么知道你的班级是否有一个特定的方法,或者不是更精细的反思。