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

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

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

有什么建议么?

非常感谢

马特

解决方法

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

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

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

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....