9

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

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

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

4

3 回答 3

12

好问题!

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

  1. ViewModel 无论如何都属于presentation。
  2. 因为 viewModel 可以是不同模型的组合(例如:从 10 个模型构建的 1 个 viewModel),您的服务层应该只与您的域实体一起使用。

否则,您的服务层最终将无法使用,因为受您的视图模型(特定于一个视图)的限制。

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

于 2013-05-21T18:33:30.143 回答
9

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

为什么?

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

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

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

于 2013-05-22T19:18:43.810 回答
-3

是的。我很确定没问题。

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

于 2013-05-21T18:13:45.327 回答