我希望这不是非常主观,但是当谈到验证业务逻辑时,我会看到两条路径,除非我弄错了,否则会产生几乎相同的结果:
使用服务层执行模型上的所有验证(参考:http://www.asp.net/mvc/tutorials/older-versions/models-%28data%29/validating-with-a-service-layer-cs)
使用数据注释装饰您的模型
在第一个实例中,模型是数据的哑容器,在第二个实例中,模型知道其有效状态。除此之外,我错过了两者之间的细微差别吗?在某些情况下,是否应该使用另一个?
谢谢,
克里斯
答案 0 :(得分:1)
在我看来,您可以使用数据注释或Fluent Validation在模型(InputModel)上保留基本验证(必填字段,正则表达式字段,比较字段等...),以及服务层中的业务验证。我认为Annotations更多的是创建一个屏幕验证和输入到服务器端而不是业务验证。如果您将业务保留在服务层,则必须记住创建一个ModelState
包装器以将其与Asp.Net MVC集成,并在视图上显示它。
看一下ModelState Wrapper的相同内容:
public class ModelStateWrapper : IValidationDictionary
{
private ModelStateDictionary _modelState;
public ModelStateWrapper(ModelStateDictionary modelState)
{
_modelState = modelState;
}
#region IValidationDictionary Members
public void AddError(string key, string errorMessage)
{
_modelState.AddModelError(key, errorMessage);
}
public bool IsValid
{
get { return _modelState.IsValid; }
}
#endregion
}
答案 1 :(得分:1)
它们不是互斥的,您可以使用“静态”规则的属性,以及“动态”规则的服务层验证(例如检查唯一性)。
引用您所引用的教程:
在本教程中,您将学习如何移出验证逻辑 你的控制器和一个单独的服务层。
嗯,用数据注释属性修饰的模型不必在控制器旁边的Web项目中,它可以在服务旁边的服务层中,这意味着所有验证逻辑都在一个地方。