1

我有一个采用 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 方法?

谢谢

4

1 回答 1

0

您应该在业务层中保留业务逻辑规则产生的验证,并且只在 UI 层中包含数据输入验证。

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

我希望这有帮助。

于 2012-06-26T17:57:16.090 回答