首页 > 解决方案 > mvc 控制器应该只准备数据并将其传递给适当的服务方法调用

问题描述

请判断这是否是正确的陈述:

“Mvc 控制器的方法应该只调用一个适当的服务方法,所有其他语句应该只安排将传递给该服务方法的数据。”

假设我正在使用 asp.net core web api,并且我有一个专用于用户注册的端点('user/register')。所以它在控制器内部有方法(比如说 UserController 什么的):

Registed([FromBody] User user) {...}.

这个方法应该只有一个服务方法调用是否正确:

_userRegistrationService.Register(UserDto user) {...}

在它和所有其他语句应该只准备用户模型而不是别的吗?

所以基本上控制器只安排数据并将其传递给服务方法而不做其他任何事情。

这似乎合乎逻辑且在 mvc 惯用语上是正确的。是吗?

标签: c#asp.net-mvcasp.net-coreasp.net-web-apimodel-view-controller

解决方案


为了公平起见,这是一个更大的讨论,不能断章取义。

保持控制器非常精简并将所有逻辑保留在其他位置通常是一种很好的做法。

造成这种情况的原因有很多,主要原因是它将业务功能保留在它所属的地方,在它自己的专用位置。这会对测试产生影响,因为您不再需要做所有没有经验的开发人员所做的疯狂事情,例如实例化和模拟控制器,调用控制器方法来测试事情,如果您的功能被解耦,那么测试会变得更加简单因为您可以单独测试这些单独的东西,而无需尝试测试整个 MVC 框架。

这通常是该陈述正确的上下文。


推荐阅读