目前,我们正在执行不带事件源的CQRS。
我们有命令(例如UpdateUser)和查询(例如:GetUser,GetAllUsers)。
我们的域仅在服务器上是已知的,因为有多个不同的客户端。客户端通过DTO接收数据,他们不知道服务器上的实际实体。
当前,如果我们有一个View和ViewModel来表示UserDTO并对其进行验证,我们会将UserDTO映射到UserDTOValidation对象,其中存在一些方法“IsValid()...”等。
现在,此方法可行,但需要花费大量时间和映射,并且在大型解决方案中将很难进行管理。
例如。:
这种验证感觉不对,但是可以。
任何人都可以展示一种更好的工作方式(如果可能的话,代码示例)来验证用户输入,并给出反馈并在客户端和服务器上进行验证。
请记住,我们正在使用DTO,客户端上不知道服务器中的实体,只有DTO是未知的。
更新:
UserDTOValidation还具有“IsDirty”属性,以了解是否已对其进行编辑,因为我们不希望发送未更改的更新命令。我认为将IsDirty属性和验证添加到DTO本身并不可行。因此,这是我不知道如何改进的另一个问题。
最佳答案
如果要应用CQRS,则不需要执行此映射。读取侧已准备好UserDTO投影。
您不应该将UserDTO作为命令参数发送。您只应向命令提供执行所需的最小数据。
另外,如果您有UpdateUserCommand,则应该重新考虑是否需要使用CQRS,我猜CRUD将以更简单的方式解决您的问题。
尽管您可以针对读取查询在客户端上预先验证唯一性,并且在99,9999%的情况下就足够了,但是在某些情况下,该命令将在域级别失败。
在这种情况下,您将必须按照自己的方式进行处理,即等待返回值或可能捕获异常。
关于c# - MVVM验证和DTO的用户反馈,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35792502/