我有一些规则要求在我的应用程序中进行数据验证,通常我会以三种不同的方式进行验证,而且我不确定如何验证并将信息返回给控制器以显示给用户。
我正在将房屋对象添加到街道对象。要遵循3条规则。
规则1.门牌号必须在0-10之间
方法:使用模型状态进行数据注释/验证
我通常会在模型中使用简单的数据注释来验证此规则
[Range(0,10, ErrorMessage = "Blah blah blah")]
然后在控制器中执行ModelState.IsValid检查。
规则2。门牌号和街道名称的组合必须唯一
方法:Fluent API /会抛出SqlException
我通常会使用Fluent API实施以下规则
builder.Entity<Street>(b =>
{
b.HasIndex(e => new { e.HouseNumber, e.StreetName }).IsUnique();
});
当我尝试将其添加到数据库中时,我希望这会引发异常,而我会陷入服务层。
规则3-街道不能容纳超过10栋房屋
方法:服务层检查,并引发异常或返回false
通常,我的控制器将调用服务层,该服务层将在调用存储库以保存数据之前检查业务规则。如果规则失败,则会抛出异常。
throw new CreateHouseException("Street has reached maximum capacity");
或者只是让方法返回false。
其余
所有我的视图/ viewModels都设置为在需要时返回状态消息以及用户信息。
这似乎与在三个位置以三种方式发生的业务规则验证完全脱节。
我觉得我应该将我的Validation合并到一个位置,并且我敢肯定这应该在服务层中完成。我已经做了一些研究,并在权衡以下几点
我知道其中有些可能是个人喜好。但是,您将如何整合这三种方法,又如何将必要的信息返回给控制器以传递到视图?