如果在何时进行客户端验证时需要进行域级验证?
我使用ASP.NET MVC来开发我的Web应用程序。我喜欢区分我的领域模型和视图模型。我的领域模型包含来自数据库的数据,而我的视图模型包含视图/页面上的数据。
假设我正在处理客户数据。
我将在我的数据库中拥有一个名为“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);
我使用这个顾客领域模型并将其传递到我的仓库层,它将数据添加到我的表中。
在什么时候需要对领域模型进行验证?我在我的视图模型上进行所有的验证。我可以在将数据添加到数据库之前在我的领域模型中验证数据,但是考虑到已经在视图模型上进行了验证,这样做不就是在客户端复制相同的验证吗?
有人能解释一下这个验证问题吗?
Validate()
实例方法,用于验证自身。不过我离DDD专家还很远。对于这个有趣的问题点赞。 - Simon Whitehead