我有一个采用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方法?
谢谢
答案 0 :(得分:0)
您应该在业务层中保持业务逻辑规则的验证,并且只在UI层中包含数据条目验证。
因此,例如验证电子邮件地址条目,根据一些正则表达式属于UI层,但确保电子邮件地址对您的系统是唯一的应该在业务逻辑中完成。
我希望这会有所帮助。