将ViewModel从演示文稿传递到服务 - 是否可以?

8 asp.net design-patterns

在我的一个视图中,我有一个ViewModel从两个表填充,然后绑定List<ViewModel>到可编辑的GridView(ASP.NET Web窗体).

现在我需要将编辑List<ViewModel>后的内容发送回服务层以在数据库中更新它.

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

chr*_*ron 11

好问题!

在与我的队友进行了几次(硬)辩论以及我对MVC应用程序的经验之后,我不建议将viewmodel传递给您的服务/域层.

  1. 无论如何,ViewModel都属于演示文稿.
  2. 由于viewModel可以是不同模型的组合(例如:1个viewModel由10个模型构建),因此您的服务层应仅适用于您的域实体.

否则,您的服务层最终将无法使用,因为viewModel限制了一个视图的细节.

使用像https://github.com/AutoMapper/AutoMapper这样的好工具来完成映射工作.


Ger*_*old 8

会这样做.我的规则是:提供服务方法,以及完成工作所需的一切,仅此而已.

为什么?

  1. 因为它减少了耦合.通常,服务方法来自多个来源(消费者).消费者更容易实现简单的方法签名,而不是必须构建一个相对复杂的对象,如视图模型,否则它可能与之无关.它甚至可能需要引用它本来不需要的组件.

  2. 它大大减少了维护工作量.我认为普通开发人员花费超过50%的时间来检查和跟踪现有代码(甚至可能更多).现在每个人都知道,寻找存在的东西需要不成比例的时间:你必须到处都可以肯定.如果一个方法接收到的参数(或具有属性的对象)没有直接使用或者在调用堆栈的下游,那么您或其他人将会一次又一次地走这么长的路.

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