在哪里以及如何验证和映射ViewModel?

6
我正在尝试学习领域驱动设计,并最近读到许多人提倡为视图创建ViewModels,以存储您想要在给定视图中显示的所有值。
我的问题是,我应该如何进行表单验证?我应该为每个视图创建单独的验证类,还是将它们分组在一起?我也对这在代码中的实现方式感到困惑。
这是我目前认为验证和视图模型适合事物流程的方式:
视图(某些用户输入)-> 控制器 -> FormValidation(ViewModel)->(如果有效,则映射到ViewModel到领域模型)-> 领域层服务-> 基础设施
谢谢!
P.S. 我使用C#的Asp.net MVC。
4个回答

0
我建议您将验证规则放在您的领域模型中。这是最简单和重复的方法(例如使用System.ComponentModel.DataAnnotations - MVC 2默认模型绑定器支持它)。
如果您有复杂和广泛的领域模型,并且不想被映射具有相同名称的属性所困扰,请尝试使用AutoMapper,这是一种非常棒的工具来完成这种工作。

0

在表示层上验证视图模型。请记住,您应该仅验证与表示相关的验证(日期格式正确,名称!=“”,等等)。

Asp.net Mvc具有一些内置验证支持,通常足以进行基本验证。

应用领域驱动设计时的棘手部分是领域验证。可能存在复杂规则,对存储库的依赖以及类似的内容,这可能使“验证运行”而不使领域模型变得愚蠢相当困难。

因此-从不让领域对象滑入无效状态似乎是一个好主意,如果发生这种情况,只需抛出异常即可。


最好不要试图机械地将视图模型映射到域模型 - 这种方法会增加耦合,可能会破坏您的域模型的封装性并使其变得愚蠢。

0

我一直在尝试将表单验证放在 ViewModel 中,对于复杂的业务验证,我使用服务层。

这实际上效果非常好,代码阅读和维护都更加容易。


0

这是一个常见的问题,它并不总是有一个正确的答案。请查看Derick Bailey的this post。这是一个关于这个问题的好讨论,并且还有一些其他优秀文章的链接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接