业务验证与层中的DataAnnotations并排

时间:2012-04-18 07:26:45

标签: asp.net-mvc asp.net-mvc-3 validation data-annotations

我有一个采用3层方法的MVC 3应用程序。我的数据层包含edmx文件和t4模板,每当我的edmx文件发生变化时,它都会生成带有基本DataAnnotations的实体。

此外,我正在利用以下内容来允许对现有实体和财产进行额外验证。这个允许我将自动生成DataAnnotations与自己的书面注释结合起来。

[MetadataType(typeof (PersonMetaData))]
public partial class Person
{
}

public class PersonMetaData
{
    [RegularExpression(@"(\w|\.)+@(\w|\.)+", ErrorMessage = "Email is invalid")] public string Name;
}

更进一步,我发现了以下文章http://www.howmvcworks.net/OnModelsAndViewModels/ExtendingTheModelBinderForEnhancedValidation

这允许我使用现有的ASP.NET MVC逻辑,并在需要时实现自己的验证方法。这个例子对我有用。

不幸的是,因为我有一个3层应用程序并且想要在业务逻辑中(而不是在数据层中)验证我的实体,所以在不创建循环依赖关系的情况下,我无法将任何对业务逻辑的调用放入Validate方法中。

有没有更好的方法来组合自动生成的DataAnnotations,自己的验证扩展,业务逻辑中的验证和IBindingValidatable方法?

谢谢

1 个答案:

答案 0 :(得分:0)

您应该在业务层中保持业务逻辑规则的验证,并且只在UI层中包含数据条目验证。

因此,例如验证电子邮件地址条目,根据一些正则表达式属于UI层,但确保电子邮件地址对您的系统是唯一的应该在业务逻辑中完成。

我希望这会有所帮助。