Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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# MVC4在何处编写映射逻辑_C#_Asp.net_Asp.net Mvc 4 - Fatal编程技术网

C# MVC4在何处编写映射逻辑

C# MVC4在何处编写映射逻辑,c#,asp.net,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc 4,我正在一个MVC4网站上工作,在那里我的控制器调用一个服务,我必须将响应映射(一对一映射)回我的viewmodel。我可以想到三种可能的方法:- 将映射保存在控制器本身中 有一个单独的映射层(在我的项目中有一个单独的文件夹),我的所有映射逻辑将驻留在该层,控制器将调用此方法 在viewmodel类中具有映射逻辑 Idea 2和Idea 3看起来显然更好,因为映射方法可以跨控制器重用 但我不知道在2,3之间使用哪一个。 如果我使用方法2,职责将得到很好的定义,但会添加另一个类文件,这可能会使解决方

我正在一个MVC4网站上工作,在那里我的控制器调用一个服务,我必须将响应映射(一对一映射)回我的viewmodel。我可以想到三种可能的方法:-

  • 将映射保存在控制器本身中
  • 有一个单独的映射层(在我的项目中有一个单独的文件夹),我的所有映射逻辑将驻留在该层,控制器将调用此方法
  • 在viewmodel类中具有映射逻辑
  • Idea 2和Idea 3看起来显然更好,因为映射方法可以跨控制器重用

    但我不知道在2,3之间使用哪一个。 如果我使用方法2,职责将得到很好的定义,但会添加另一个类文件,这可能会使解决方案在长期内的可维护性降低

    如果我使用方法3,那么映射逻辑被限制在viewmodel内部,但我觉得它违反了SRP(单一责任原则),因为viewmodel类同时负责显示元素和映射逻辑

    关于映射逻辑应该放在哪里,是否有良好的实践? 如果你有任何链接,也请分享。

    我主张选项2,因为映射层类有明确定义的责任


    在我看来,映射逻辑的明显位置完全证明了类数量的增加是合理的。我把它比作有多个JavaScript文件作为模块,虽然它增加了要维护的文件的数量,但它让我们更清楚地了解什么是系统中的什么。

    就我个人而言,我要说的是,停止自杀,只需使用类似的东西,但是如果你想采用手动方式,我推荐选项2的原因与我推荐AutoMapper的原因大致相同:这种类型的东西属于库。我不认为这会更难维持。事实上,将所有映射逻辑包含在项目中的一个类或多个类的一个位置听起来比任何其他解决方案都更易于维护。

    您在谈论什么样的映射?我在谈论对象的手动一对一映射Hanks Chris,即使我也有同样的感觉,但找不到与此相关的示例项目或文章,您身边是否有一些关于设置映射库的参考资料?不,不幸的是,我认为缺乏资源是由于这类事情的性质。已经有很多库可以解决这个问题(AutoMapper只是其中之一,但还有其他库)。通常,如果你正在做足够多的映射,需要为它创建一个库,你只需要使用现有的东西,而不是重新创建轮子。谢谢Karl,即使我也有同样的感觉,但找不到与此相关的示例项目或文章,你身边有几篇参考资料吗?