Asp.net 将ViewModel从演示文稿传递到服务—可以吗?

Asp.net 将ViewModel从演示文稿传递到服务—可以吗?,asp.net,design-patterns,Asp.net,Design Patterns,在我的一个视图中,我有一个从两个表填充的ViewModel,然后将列表绑定到一个可编辑的GridView(ASP.NET Web表单) 现在,我需要将编辑的列表发送回服务层,以便在数据库中更新它 我的问题是-将ViewModel发送回Services可以吗,还是应该保留在演示文稿中?如果不是-我应该更好地使用DTO吗?非常感谢。是的。我很肯定这没问题 尝试使用,它将帮助您分配。好问题 在与我的队友进行了几次(艰苦的)辩论之后,再加上我在MVC应用程序方面的经验,我不建议将viewmodel传递给

在我的一个视图中,我有一个从两个表填充的
ViewModel
,然后将
列表
绑定到一个可编辑的GridView(ASP.NET Web表单)

现在,我需要将编辑的
列表
发送回服务层,以便在数据库中更新它


我的问题是-将ViewModel发送回Services可以吗,还是应该保留在演示文稿中?如果不是-我应该更好地使用DTO吗?非常感谢。

是的。我很肯定这没问题

尝试使用,它将帮助您分配。

好问题

在与我的队友进行了几次(艰苦的)辩论之后,再加上我在MVC应用程序方面的经验,我不建议将viewmodel传递给您的服务/域层

  • 不管发生什么,ViewModel都属于演示文稿
  • 因为viewModel可以是不同模型的组合(例如:1个viewModel由10个模型构建),所以您的服务层应该只与域实体一起工作 否则,您的服务层最终将无法使用,因为它受到viewModels的约束,而viewModels是一个视图的特定对象

    像这样的好工具是用来做映射工作的。

    我不会这么做。我的规则是:为服务方法提供他们工作所需的一切,而不是更多

    为什么?

  • 因为它减少了耦合。服务方法通常来自多个来源(消费者)。对于消费者来说,实现一个简单的方法签名要比构建一个相对复杂的对象(如视图模型)容易得多,否则它可能与之无关。它甚至可能需要对程序集的引用,否则就不需要

  • 它大大减少了维护工作量。我认为一个开发人员平均要花费50%以上的时间来检查和跟踪现有代码(可能更多)。现在每个人都知道,寻找不存在的东西需要花费不成比例的时间:你一定去过任何地方才能确定。如果一个方法接收到的参数(或带有属性的对象)不是直接使用的,也不是调用堆栈中的其他对象,那么您或其他人将一次又一次地走这条漫长的道路


  • 因此,如果视图模型中有任何内容在服务方法中不起作用,请不要使用它来调用该方法。

    我看不出视图模型是表示层有任何问题。您应该使用DTO。虽然这是一个好问题,但老实说,它不太适合StackOverflow格式,请参阅:没有实际问题需要解决:“我很好奇其他人是否也这么认为。”我一直倾向于这一点(即使用自己的模型而不是VM)但是,如果ViewModel具有与模型完全相同的属性,那么情况又如何呢?这不算是重复吗?