Validation 实体、领域驱动设计的更新

Validation 实体、领域驱动设计的更新,validation,domain-driven-design,Validation,Domain Driven Design,假设我有一个订单,该订单在UI上更新了一些值(它们可以是ok/不ok以确保保存) 1.我们如何验证所做的更改?是否应验证将订单带回服务层的DTO的完整性? 验证完成后?服务如何返回验证错误?我们是否将一个ResponsedTo对象组合起来并像这样返回它 响应保存订单(OrderDTO) 我们如何更新域实体顺序?DTO汇编器是否应该负责用最新的更改更新订单实体 如果我们设想一种典型的分层方法,Web服务器上的ASP.NET,应用服务器上的WCF。 使用web上的数据更新并保存订单时。WCF收到一个

假设我有一个订单,该订单在UI上更新了一些值(它们可以是ok/不ok以确保保存)
1.我们如何验证所做的更改?是否应验证将订单带回服务层的DTO的完整性?
验证完成后?服务如何返回验证错误?我们是否将一个ResponsedTo对象组合起来并像这样返回它

响应保存订单(OrderDTO)

  • 我们如何更新域实体顺序?DTO汇编器是否应该负责用最新的更改更新订单实体 如果我们设想一种典型的分层方法,Web服务器上的ASP.NET,应用服务器上的WCF。 使用web上的数据更新并保存订单时。WCF收到一个OrderDTO。 现在我们如何从DTO更新订单?我们是否使用汇编程序用DTO的更改来更新域对象?差不多

    class OrderDTOAssembler {
     updateDomainObject(Order, OrderDTO)
    }
    


    根据我的经验,我将尝试回答您的一些问题,以及我应该如何处理您的问题

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

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

    第三,我会像示例一样使用访问者模式。OrderService将使用IOrderRepository来保存/更新订单。但使用访问者验证方法,OrderService vill调用Order.ValidatePersistance(请参见示例中的链接-但这是一个在基础架构层实现的扩展方法,因为它具有“db知识”)来检查其状态是否有效。如果为true,则返回IOrderRepository.Save(order)

    最后,如果Order.validatePersistence失败,我们将获得一条或多条BrokenRules消息。这些文件应以回复的形式返回给客户。然后cient可以对消息采取行动。这里的问题可能是您将有一个ResponseOrderTo消息,但可能(现在刚刚提出)您的所有ResponseDTO都可以从ResponseBaseDTO类继承,该类公开传递BrokerRule消息所需的属性


    我希望我的想法对你有用,祝你好运。

    我将根据我的经验回答你的一些问题,以及我应该如何处理你的问题

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

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

    第三,我会像示例一样使用访问者模式。OrderService将使用IOrderRepository来保存/更新订单。但使用访问者验证方法,OrderService vill调用Order.ValidatePersistance(请参见示例中的链接-但这是一个在基础架构层实现的扩展方法,因为它具有“db知识”)来检查其状态是否有效。如果为true,则返回IOrderRepository.Save(order)

    最后,如果Order.validatePersistence失败,我们将获得一条或多条BrokenRules消息。这些文件应以回复的形式返回给客户。然后cient可以对消息采取行动。这里的问题可能是您将有一个ResponseOrderTo消息,但可能(现在刚刚提出)您的所有ResponseDTO都可以从ResponseBaseDTO类继承,该类公开传递BrokerRule消息所需的属性


    我希望我的想法对你有用,祝你好运。

    我喜欢在这里使用命令模式,在这种情况下,UI会发出CreateOrderCommand而不是OrderDTO。我喜欢在这里使用命令模式,在这种情况下,UI会发出CreateOrderCommand而不是OrderDTO。非常感谢你。我不是唯一一个这样想的人:)非常感谢你。我不是唯一一个有同样想法的人:)