如果client validation
做,什么时候做domain level validation
?
我ASP.NET MVC
用于我的网络应用程序。我喜欢区分我的domain models
和view models
。我的域模型包含来自我的数据库的数据,我的视图模型包含我的视图/页面上的数据。
假设我正在处理客户数据。
我将在我的数据库中有一个名为Customers
.
我将有一个看起来像这样的客户类:
public class Customer
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
我将创建一个客户视图模型来仅表示我在视图中拥有的数据:
[Validator(typeof(CustomerCreateViewModelValidator))]
public class CustomerCreateViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
我将有一个创建视图,它接受我CustomerCreateViewModel
的输入字段并将我的输入字段绑定到我的视图模型:
@model MyProject.ViewModels.Customers.CustomerCreateViewModel
@using (Html.BeginForm())
{
<table>
<tr>
<td>
@Html.TextBoxFor(x => x.FirstName)
@Html.ValidationMessageFor(x => x.FirstName)
</td>
</tr>
<tr>
<td>
@Html.TextBoxFor(x => x.LastName)
@Html.ValidationMessageFor(x => x.LastName)
</td>
</tr>
</table>
<button id="SaveButton" type="submit">Save</button>
}
如您所见,我有一个CustomerCreateViewModelValidator
包含我的验证规则。用户在文本框中输入了一些数据后,他将单击提交按钮。如果某些字段为空,则验证失败。如果输入了所有必填字段,则验证成功。然后,我会将数据从我的视图模型映射到我的域模型,如下所示:
Customer customer = Mapper.Map<Customer>(viewModel);
我采用这个客户域模型并将其传递到我的存储库层,并将数据添加到我的表中。
什么时候需要对域模型进行验证?我对我的视图模型进行了所有验证。我可以在将数据添加到数据库之前验证我的域模型中的数据,但是看到它在视图模型上得到验证,难道它只是在客户端复制相同的验证吗?
有人可以分享一下这个验证问题吗?