我正在使用S#arp架构,我不记得我在哪里阅读,但他们说他们的viewmodels应该存储在服务层,你的视图应该提交viewmodel到服务进行处理.
我的问题是这个.哪一层应该构造viewmodel?应该在服务层,控制器要求吗?还是控制器本身呢?还有一个关于更新视图模型的问题,就像它包含集合一样,并且模型状态无效,您还需要重新排列任何列表.
有什么建议么?
非常感谢
马特
解决方法
我在控制器内创建视图模型.控制器采用域实体(由模型绑定器从数据库中检索),可能在其他视图模型内部,联系信息库以获取其他数据,创建新视图模型,并将其传递到适当的视图(或重定向).所以控制器的职责就是根据输入的域数据准备视图/视图模型(当然处理错误).
您可以查看here替代在控制器中创建视图模型.这种技术将视图模型创建移动到动作之外,这样不仅控制器操作接受纯域对象,而且还返回纯域对象.我不会说在任何情况下都适合,但学习非常有趣.
与AutoMapper相关的上述技术也引起了类似于“我应该将viewmodel传递给服务层”的问题.不,你不如果需要将复杂对象传递到服务或域层,则可以在相应的服务/域层中定义该对象,并使用它将数据传递到这些层.然后可以将该对象轻松映射到视图模型(例如,使用AutoMapper).但是您的下层(服务/域)不应与上层(视图/控制器)耦合.不是在这种情况下,不在其他的情况.从不低层次应该依赖于它们上面定义的东西.