更新实体,域驱动设计

时间:2011-04-08 13:46:09

标签: validation domain-driven-design

假设我有一个订单,在UI上更新了一些值(它们可以正常/不能确保保存)
1.我们如何验证所做的更改?将订单带回服务层的DTO是否应该验证完整性? 验证完成后?服务如何返回验证错误?我们是否编写了一个ReponseDTO对象并将其返回为

ResponseDTO saveOrder(OrderDTO);

  1. 我们如何更新域名实体订单? DTO汇编程序是否应该使用最新的更改来更新订单实体?
  2. 如果我们想象一个典型的分层'方法,Web服务器上的ASP .NET,Application Server上的WCF。 订单表单使用Web上的数据进行更新并保存。 WCF收到OrderDTO。 现在我们如何从DTO更新订单?我们是否使用汇编程序通过DTO的更改来更新域对象?

    之类的东西

    class OrderDTOAssembler {
     updateDomainObject(Order, OrderDTO)
    }
    

1 个答案:

答案 0 :(得分:1)

我会尝试从我的经验中回答你的一些问题,以及我应该如何解决你的问题。

首先我不应该让DTO进行任何验证,但只是简单的POCO DTO通常具有不同的属性和特定的数据类型,因此进行了某种验证。我的意思是你必须为街道名称等应用整数街道号码和字符串。

第二,你指出。让ORderDTOAssembler从OrderDTO转换为Order,反之亦然。这是在应用程序层中完成的。

第三,我会像示例一样使用访问者模式Validation in a Domain Driven Design。 OrderService将使用IOrderRepository来保存/更新订单。但是使用访问者验证方法,OrderService会调用Order.ValidatePersistance(请参阅示例中的链接 - 但这是在基础结构层中实现的扩展方法,因为它具有“db knowledge”)以检查其状态是否有效。如果为true,那么我们到IOrderRepository.Save(order)。

最后,如果Order.ValidatePersistance失败,我们会收到一条或多条BrokenRules消息。这些应该在ResponseDTO中返回给客户端。然后,cient可以对消息采取行动并采取行动。这里的问题可能是你有一个ResponseOrderDTO消息,但也许(现在就想出来)你的所有ResponseDTO都可以从ResponseBaseDTO类继承,它暴露了传递BrokenRule消息的必要属性。

我希望你发现我的想法很有用,祝你好运。

相关问题