asp.net-mvc – 哪一层应该构建一个View Model?

我正在使用S#arp架构,我不记得我在哪里阅读,但他们说他们的viewmodels应该存储在服务层,你的视图应该提交viewmodel到服务进行处理.

我的问题是这个.哪一层应该构造viewmodel?应该在服务层,控制器要求吗?还是控制器本身呢?还有一个关于更新视图模型的问题,就像它包含集合一样,并且模型状态无效,您还需要重新排列任何列表.

有什么建议么?

非常感谢

马特

解决方法

我在控制器内创建视图模型.控制器采用域实体(由模型绑定器从数据库中检索),可能在其他视图模型内部,联系信息库以获取其他数据,创建新视图模型,并将其传递到适当的视图(或重定向).所以控制器的职责就是根据输入的域数据准备视图/视图模型(当然处理错误).

您可以查看here替代在控制器中创建视图模型.这种技术将视图模型创建移动到动作之外,这样不仅控制器操作接受纯域对象,而且还返回纯域对象.我不会说在任何情况下都适合,但学习非常有趣.

与AutoMapper相关的上述技术也引起了类似于“我应该将viewmodel传递给服务层”的问题.不,你不如果需要将复杂对象传递到服务或域层,则可以在相应的服务/域层中定义该对象,并使用它将数据传递到这些层.然后可以将该对象轻松映射到视图模型(例如,使用AutoMapper).但是您的下层(服务/域)不应与上层(视图/控制器)耦合.不是在这种情况下,不在其他的情况.从不低层次应该依赖于它们上面定义的东西.

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...