我一直在摆弄一些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项目的文件夹中。谢谢你们
答案 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)
我会遵循您将属性添加到域对象的原始意图