ASP.NET MVC在何处放置自定义验证属性

时间:2011-06-08 19:03:20

标签: validation asp.net-mvc-3

我一直在摆弄一些ASP.NET MVC3解决方案结构,我已经确定了一个由以下项目组成的设计:

MyApp.Web -  MVC3 Web Layer
MyApp.Data - Repositories and infrastructure for managing data
MyApp.Domain - POCO Entities
MyApp.Service - Service layer through with I manipulate the model
MyApp.Test - doh

您将自定义验证属性类放在哪里?就我而言,他们应该进入Domain项目,因为它们特定于那里的实体类,但是我需要引用一些dll,如System.Web.MVC,我本来希望将该项目中的参考文献保持在最低限度。想法?

更新:

我从我的Domain项目中删除了所有属性,并创建了视图模型以将它们包装在Web项目中。 将我的所有自定义验证类放在Web项目的文件夹中。谢谢你们

4 个答案:

答案 0 :(得分:3)

我会在Web项目上创建这些属性,并将它们附加到viewmodel而不是实体。

答案 1 :(得分:2)

您无需引用网络dll。仅System.ComponentModel.DataAnnotations

将验证属性放在使用位置。

更新

  

为什么不呢?我见过的几乎所有例子都在视图中使用POCO。有什么选择?为我的POCO创建某种包装类?

因为:

安全

假设您有一个IsAdmin字段的用户POCO。通过使用POCO,MVC中的ModelBinder将设置该属性,如果它由“黑客”发布,从而获得管理员访问权。

<强>隔离

在视图中使用POCO会使View间接依赖于您的数据库。当然,POCO应该消除这种依赖性。但实际上他们很少这样做。

<强>定制

您很少在视图中显示所有值,因为它们存储在数据库中。

调整模型的代码不应该在视图中,而应该在viewmodel中。在视图中使用尽可能少的逻辑。

答案 2 :(得分:0)

我的Web项目中有DataAnnotation属性,最好是在Common.Attributes文件夹中。我认为jgauffin所得到的(并且我同意)是你的CustomAttributes应该真正装饰你的Domain项目中的ViewModels vs Entities。

答案 3 :(得分:0)

我会遵循您将属性添加到域对象的原始意图