在我的一个观点中,我有一个ViewModel
从两个表中填充的,然后将一个绑定List<ViewModel>
到一个可编辑的 GridView(ASP.NET Web 窗体)。
现在我需要将编辑后的内容发送List<ViewModel>
回服务层以在数据库中更新它。
我的问题是 - 可以将 ViewModel 发送回服务,还是应该留在演示文稿中?如果不是 - 我应该更好地使用 DTO 吗?非常感谢。
在我的一个观点中,我有一个ViewModel
从两个表中填充的,然后将一个绑定List<ViewModel>
到一个可编辑的 GridView(ASP.NET Web 窗体)。
现在我需要将编辑后的内容发送List<ViewModel>
回服务层以在数据库中更新它。
我的问题是 - 可以将 ViewModel 发送回服务,还是应该留在演示文稿中?如果不是 - 我应该更好地使用 DTO 吗?非常感谢。
好问题!
在与我的队友进行了几次(激烈的)辩论+我对 MVC 应用程序的经验之后,我不建议将 viewmodel 传递给您的服务/域层。
否则,您的服务层最终将无法使用,因为受您的视图模型(特定于一个视图)的限制。
制作了像https://github.com/AutoMapper/AutoMapper这样的好工具来完成映射工作。
我不会这样做。我的规则是:为服务方法提供完成工作所需的一切,仅此而已。
为什么?
因为它减少了耦合。服务方法通常来自多个来源(消费者)。对于消费者来说,完成一个简单的方法签名比构建一个相对复杂的对象(如视图模型)要容易得多,否则它可能与它无关。它甚至可能需要引用它不需要的程序集。
它大大减少了维护工作。我认为普通开发人员花费超过 50% 的时间检查和跟踪现有代码(甚至更多)。现在每个人都知道,寻找不存在的东西会花费不成比例的时间:你肯定去过任何地方才能确定。如果一个方法接收到的参数(或具有属性的对象)没有直接使用,也没有在调用堆栈的下方使用,您或其他人将一次又一次地走这条漫长的道路。
因此,如果视图模型中有任何不参与服务方法的内容,请不要使用它来调用该方法。
是的。我很确定没问题。
尝试使用MS Entity Framework,它将帮助您分配。