ASP.NET MVC - 验证逻辑 - 在哪里放置?

时间:2010-12-18 11:37:53

标签: c# asp.net-mvc validation

我正在尝试确定将“验证模型”放在何处。

我的结构目前是:

网络(参考商家和对象)

  • 控制器

  • 浏览

  • CSS

  • 脚本

商家(引用数据和对象)

  • 服务

数据(引用对象)

  • 存储库和EF上下文(代码优先)

物件

  • POCOs(适用于EF)

现在我的问题是在哪里放置像LogIn Model这样的验证?模型应该放在我的Web图层还是Objects图层中? - 或者我应该存储类似的验证模型吗?

提前致谢!

2 个答案:

答案 0 :(得分:3)

模型应放在您的业务层中。视图模型应放在您的Web图层中,因为它们与视图相关联。您应该在模型和视图模型之间建立映射(为了便于执行此任务,您可以使用AutoMapper之类的工具。视图从控制器接收视图模型。验证是在这些视图模型上执行的。

所以:

网络

  • 控制器
  • 浏览
  • 模型(此处可放置视图模型)
  • CSS
  • 脚本

答案 1 :(得分:0)

任何需要验证的内容都应该放在您的业务层中。验证是一项业务问题,不应分散在各个层中,不应与特定的应用程序类型(Web,窗口,服务等)绑定。

如果您将域模型公开给应用程序,那么您也可以使用验证属性修饰您的实体,但请注意,如果您的域模型发生更改,那么您的应用程序就会中断。

假设您在Business层中有一个AccountService类,它有一个Login方法。 Login接受LoginInput课程并返回LoginResult班级:

public class LoginInput {

   [Required]
   public string Username { get; set; }

   [Required]
   public string Password { get; set; }
} 

public class LoginResult {
   public bool Success { get; internal set; }
   public string Error { get; internal set; }
}

这两个类都可以用作ViewModel,因此您不需要在Web层中创建任何ViewModel,并且您当然不应该在其中放置验证逻辑。