如果有CQRS,DTO和实体,如何验证输入数据?

问题描述 投票:1回答:2

。Net Core 3,干净的体系结构。

我已经阅读了很多有关使用CQRS进行数据验证的文章。例如therethere

我已经得出一些结论:

  1. 需要验证DTO中的数据。它是实体合同。
  2. 一些作者的建议将日期验证为实体(域)。
  3. 在CQRS AbstractValidator中,我们也可以验证,但可以使用其他规则。

电子邮件字段验证将在1和2中进行。年龄限制将在3。

但是服务器中的三个验证+客户端中的一个验证是问题(大DRY)。在DTO或实体中更好的验证在哪里?我认为在DTO中,因为当我从输入中获取DTO时,我可以验证并调用ModelState.IsValid。但是我也阅读了一些需要验证实体中输入数据的文章。

所以,我很困惑。你能解释一下我吗:

如果需要验证电子邮件字段和年龄限制(18),则需要在使用CQRS的Clean Architecture中进行验证?

asp.net-core domain-driven-design cqrs clean-architecture
2个回答
1
投票

您所有的Api合同,命令都应依赖原始类型。一旦您要初始化域模型,如果smth错误,那么您将无法在此处进行操作。如果执行DDD,则建议您防止对象处于无效状态,而要验证无效对象(基于域模型还是基于Crud)。


0
投票

这完全取决于验证的类型。是表面验证还是深度验证?

表面验证是诸如密码强度或检查URL或电子邮件地址的正确格式之类的事情。而深度验证是与领域相关的事情。因此,这可能是这种货物是否具有危险性,或者此人的风险太大而无法向其提供信用。

[查看这篇文章,从CQRS的角度更详细地解释该概念:How to validate Commands in a CQRS Application

© www.soinside.com 2019 - 2024. All rights reserved.