Validation 您在哪里执行验证/业务规则?

Validation 您在哪里执行验证/业务规则?,validation,asp.net-mvc-3,Validation,Asp.net Mvc 3,我正在使用控制器-->视图模型-->服务层-->存储库-->数据模型(EF)方法,使用EF4制作ASP.NET MVC应用程序 我的问题是业务逻辑/验证在哪里 我是否应该将域对象复制到视图对象中并在其中进行验证?将域对象复制到视图模型的对象中似乎需要很多额外的工作 我使用的是使用T4模板生成的POCO。我个人使用了业务验证逻辑(例如用户名已被占用,由于资金不足无法电汇,…)在服务层中,视图模型上需要用户名字段等内容。我实际上喜欢@Darin Dimitrov的方法,这就是我目前在项目中使用的方法

我正在使用控制器-->视图模型-->服务层-->存储库-->数据模型(EF)方法,使用EF4制作ASP.NET MVC应用程序

我的问题是业务逻辑/验证在哪里

我是否应该将域对象复制到视图对象中并在其中进行验证?将域对象复制到视图模型的对象中似乎需要很多额外的工作


我使用的是使用T4模板生成的POCO。

我个人使用了业务验证逻辑(例如用户名已被占用,由于资金不足无法电汇,…)在服务层中,视图模型上需要用户名字段等内容。

我实际上喜欢@Darin Dimitrov的方法,这就是我目前在项目中使用的方法。为了像使用属性一样利用显示错误消息,您可以在ModelState周围使用包装器,如中所述。

@Darim Dimitrov:您能否提供服务层内验证代码的示例,以及使用视图模型时如何执行验证?谢谢。@Kassem,对于视图模型验证,我使用框架。用于服务验证,该验证将取决于项目的需求。@Sam,这两个都不是。我设计视图模型的方式是只包含给定视图所需的属性。例如,我可以有一个视图模型,其中包含来自不同域对象的属性,反之亦然,我可以将多个视图模型绑定到同一个域对象。AutoMapper为我做其余的工作。@Sam,是的,在控制器内部,因为这个逻辑在我的控制器上重复,所以我用它来处理这个问题。您可以看一看。@Sam,是的,我的示例应用程序没有服务层。当您有复杂的业务逻辑时,服务层位于控制器和存储库之间。服务层可以将多个存储库(应该执行CRUD操作)聚合到一个复杂的业务操作中,从而划分事务边界。