【发布时间】:2010-11-20 15:56:21
【问题描述】:
目前我正在将我的域对象传递给我的视图,并从 POST 直接绑定到它们。每个人都说这很糟糕,所以我尝试添加 ViewModel 概念。
但是,我找不到一种非常优雅的方法,我想知道其他人的解决方案是什么,不会导致控制器操作非常混乱。
说一些“添加人员”功能的典型过程如下所示:
- 对表示空白 Person 视图模型的视图发出 GET 请求
- 回发(输入)有效数据
- 控制器将发布的数据绑定到人员视图模型上
- 如果绑定失败,我需要执行与 (1) 相同的操作,但需要一些数据,而不是空白对象和错误
- 如果绑定成功,我需要将虚拟机的属性映射到真实模型上
- 验证模型
- 如果验证通过:保存人员、提交、将用户详细信息映射到显示 VM 并在视图中返回
- 如果验证失败,请执行与 (1) 中相同的操作,但会出现一些数据和错误
在控制器操作中执行所有这些操作(忽略 GET)当然不是 SRP 或 DRY。
我试图想出一种方法来打破这个过程,以便它确实遵守 SRP、干净、模块化并且最重要的是可测试。
人们对此有什么解决方案?
我一直在尝试使用自定义控制器动作调用程序将关注点分离为单独的方法、智能模型绑定器和简单的蛮力,但我还没有找到满意的解决方案。
附:因为它增加了如此多的复杂性,所以说服我为什么我什至需要打扰
【问题讨论】:
-
什么都没有 :( 仍在尝试确定一个优雅的解决方案,这样我的控制器就不会变得非常混乱。我认为真正的答案是 openrasta。
标签: asp.net-mvc viewmodel