假设我有一个订单,在UI上更新了一些值(它们可以正常/不能确保保存)
1.我们如何验证所做的更改?将订单带回服务层的DTO是否应该验证完整性?
验证完成后?服务如何返回验证错误?我们是否编写了一个ReponseDTO对象并将其返回为
ResponseDTO saveOrder(OrderDTO);
如果我们想象一个典型的分层'方法,Web服务器上的ASP .NET,Application Server上的WCF。 订单表单使用Web上的数据进行更新并保存。 WCF收到OrderDTO。 现在我们如何从DTO更新订单?我们是否使用汇编程序通过DTO的更改来更新域对象?
之类的东西
class OrderDTOAssembler {
updateDomainObject(Order, OrderDTO)
}
答案 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消息的必要属性。
我希望你发现我的想法很有用,祝你好运。