Asp.net mvc 使用mvc的asp.net的创建者建议在应用程序中使用什么样的业务逻辑?

Asp.net mvc 使用mvc的asp.net的创建者建议在应用程序中使用什么样的业务逻辑?,asp.net-mvc,model-view-controller,model,controller,business-logic,Asp.net Mvc,Model View Controller,Model,Controller,Business Logic,当我搜索互联网时,我发现有些人说逻辑应该放在ViewModel中,有些人说逻辑应该放在Controller中,放在asp.net和mvc应用程序中 所以我不能得出结论 官方(asp.net和MVC的创建者)对此有何建议 决定的理由是什么?(带说明和示例) 我目前无法提供源代码或引用(根据您的要求),但业务逻辑应该放在控制器的操作方法中,或者放在操作方法调用的另一层中(例如后端Web服务,如果您的ASP.NET MVC应用程序仅作为现有应用程序的前端,如OWA对Exchange Server的作用

当我搜索互联网时,我发现有些人说逻辑应该放在
ViewModel
中,有些人说逻辑应该放在
Controller
中,放在
asp.net和mvc
应用程序中

所以我不能得出结论

  • 官方(asp.net和MVC的创建者)对此有何建议
  • 决定的理由是什么?(带
    说明
    示例

  • 我目前无法提供源代码或引用(根据您的要求),但业务逻辑应该放在控制器的操作方法中,或者放在操作方法调用的另一层中(例如后端Web服务,如果您的ASP.NET MVC应用程序仅作为现有应用程序的前端,如OWA对Exchange Server的作用)


    这种论证的核心是“关注点”的概念,在这种情况下,ViewModel对象应该只关注视图和控制器之间的数据传输和验证(而不是验证)。在ASP.NET MVC中,ViewModel类应该是POCO(普通的旧CLR对象)仅包含与视图中用户提供的数据相对应的属性。在我自己的项目中,我将其扩展为包括将数据从业务实体转换为ViewModel对象,而不是直接在控制器的操作中填充属性。我还使用对MVC管道的修改来执行我自己的验证逻辑。视图模型应该只包含与表示相关的逻辑。绝对没有业务逻辑

    业务逻辑也不应该真正进入控制器中。控制器应该是响应请求时招募的组件的协调员

    对于除最琐碎的应用程序外的所有应用程序,您都不需要创建实现业务逻辑和操作/持久化模型的服务层

    对于更大的应用程序,您可能还拥有由服务层访问的专用业务域层


    我有一个库,我发现它对于在MVC(和其他)应用程序中实现和共同定位域/规则/工作流非常有用你是指应用程序的模型层,实体模型类本身,还是ViewModels?@Dai:应该是viewmodel。我已经编辑了这个问题。我在互联网上看到,在控制器中实现业务逻辑的一个缺点是
    很难测试
    。不,这与现实完全相反。如果你同意的话如果您的业务逻辑在逻辑上与表示分离,因为它位于控制器中,那么您可以让它更易于测试,因为您可以将其呈现到模拟视图或使用模拟数据源提供给它。您可以通过提供模拟控制器来测试您的视图。假设我们只有一个层(没有服务层)。那么我们把业务逻辑放在哪里呢?我不知道你为什么会采用这样的约束。即使你不把它称为层,你也可能需要将业务逻辑与控制器分离,以避免重复代码。最简单的例子是一个静态实用程序类,其中包含在模型上操作的方法,但这也不是真的o在OO设计中受到鼓励,因为它是一种具体的依赖关系。