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

时间:2013-05-21 17:58:33

标签: asp.net design-patterns

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

现在我需要将已编辑的List<ViewModel>发送回服务层,以便在数据库中更新它。

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

3 个答案:

答案 0 :(得分:10)

好问题!

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

  1. ViewModel属于演示文稿,无论如何。
  2. 由于viewModel可以是不同模型的组合(例如:从10个模型构建的1个viewModel),因此您的服务层应仅适用于您的域实体。
  3. 否则,您的服务层最终将无法使用,因为您的viewModel会限制一个视图的特定内容。

    https://github.com/AutoMapper/AutoMapper这样的好工具是为了完成制图工作。

答案 1 :(得分:7)

我会这样做。我的规则是:提供服务方法,包括完成工作所需的一切,

为什么?

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

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

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

答案 2 :(得分:-3)

是。我很确定没问题。

尝试使用MS Entity Framework,它会帮助你分配。