目前,我将我的领域对象传递给视图,并直接从POST进行绑定。每个人都说这样做不好,因此我正在尝试添加ViewModel的概念。
但是,我找不到一种非常优雅的方法来实现这一点,我想知道其他人解决这个问题的解决方案,以避免最终出现非常混乱的控制器操作。
例如,“添加人员”功能的典型过程如下:
- 获取表示空白Person ViewModel的视图的GET请求
- 提交(无效)数据
- 控制器将发布的数据绑定到person viewmodel上
- 如果绑定失败,则需要执行与(1)相同的操作,但具有一些数据,而不是空对象和错误
- 如果绑定成功,则需要将VM属性映射到一个真实的模型上
- 验证模型
- 如果验证通过:保存person、提交、将用户详细信息映射到显示VM并在视图中返回它
- 如果验证失败,则需执行与(1)相同的操作,但具有一些数据和错误
在控制器操作中执行所有这些操作(忽略GET)肯定不符合SRP或DRY。
我正在尝试想出一种方法,以便将此过程拆分为模块化的、干净的方法,并且最重要的是可测试。
人们对这个问题的解决方案是什么?
我一直在尝试使用自定义控制器操作调用程序将关注点分离成单独的方法、智能模型绑定器和简单粗暴的方法,但我还没有找到一个满意的解决方案。
P.S. 由于它增加了很多复杂性,请说服我为什么要费心