Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC控制器中有模型映射和更多逻辑好吗?_C#_.net_Architecture - Fatal编程技术网

C# 在MVC控制器中有模型映射和更多逻辑好吗?

C# 在MVC控制器中有模型映射和更多逻辑好吗?,c#,.net,architecture,C#,.net,Architecture,我正在做一个.NET解决方案,我必须设计它。所以我的架构如下所示 DLL(数据逻辑层)(在这里我有我所有的存储库来访问数据) 模型(在模式方面) ViewModels(单独作为类库) 服务层(其中操作数据并发送到控制器) 这里DLL将通过访问数据库发送数据。然后,服务层将使用这些存储库(比如UserRepository)并按照我想要发送给控制器的方式操作数据。在这种情况下,控制器将把ViewModels返回到视图。 所以我想知道的是,当将数据映射到ViewModels时,我的服务层是否应该进行映

我正在做一个.NET解决方案,我必须设计它。所以我的架构如下所示

  • DLL(数据逻辑层)(在这里我有我所有的存储库来访问数据)
  • 模型(在模式方面)
  • ViewModels(单独作为类库)
  • 服务层(其中操作数据并发送到控制器)
  • 这里DLL将通过访问数据库发送数据。然后,服务层将使用这些存储库(比如UserRepository)并按照我想要发送给控制器的方式操作数据。在这种情况下,控制器将把ViewModels返回到视图。 所以我想知道的是,当将数据映射到ViewModels时,我的服务层是否应该进行映射并将ViewModels返回给Controller?? 或 服务层作为模型返回,我们在控制器中进行映射并创建视图模型

    我觉得控制器中有这么多操作并不好。因此,我的服务应该返回ViewModels,这样控制器的工作量就会减少


    我想听听最佳实践和想法???

    我会在控制器中进行映射。因为可能存在一些实例,我们需要将相同的服务输出映射到不同的视图模型。否则,我们必须为每个视图模型类型编写多个服务方法。 您可以使用简化映射。

    看一看问题

    建议在服务层使用Automapper

    此外,配置映射是一种静态方法,只调用一次,因此对性能影响不大:


    最后,这里有一些关于设置的更多解释:

    im控制器如何控制数据以及必须对数据执行哪些操作,因此我发现在其中执行许多操作没有问题。但是询问想法和最佳实践可能会导致问题被标记为
    过于宽泛
    。我想问你是在使用AutoMapper还是在手动映射模型?@Matt没有,但我正在考虑使用它。@bradbury9好的。然后希望它不会使控制器变得丑陋和沉重。您可以添加一个或多个ViewModelServices。它们确实属于表示层,因此不进入服务层。将文件夹/命名空间添加到MVC项目的根目录或视图文件夹中。然后,如果服务层希望像DTO对象一样返回,该怎么办。我的意思是说,我有一个用户服务,我的用户模型只包括用户名和密码。在控制器中,我希望有一个像用户名、密码和角色列表这样的对象。因此,根据您的解决方案,我们必须从UserService获取用户,从RoleService获取角色,然后根据需要创建ViewModel,然后在控制器中将角色分配给rolesList。不,在控制器中,您不希望调用多个服务。在UserService中,可以有一个方法GetUserWithRoles(),它将把DTO返回给控制器。