View和ViewModel最佳实践

时间:2018-06-02 11:55:46

标签: model-view-controller asp.net-mvc-5 asp.net-mvc-viewmodel asp.net-mvc-views

我怀疑每个视图是否都有他自己的ViewModel,或者我应该在不需要ViewModel的情况下通过普通模型(如果我开始混合这两个概念,那么我最后会在丛林中结束)

我试图谷歌但是没有人谈论这个,我在它上面运行的每个帖子他们只是解释了ViewModel的目的,我知道ViewModel的主要目的是让你可以传递多个模型来查看。

2 个答案:

答案 0 :(得分:1)

这取决于。

在许多用例中,主要目的不是将字段暴露给用户不应该更新的表单提交上的绑定。我不会在不需要的时候盲目地创建它们,但这取决于开发人员以及他们对何时以及为何使用viewmodels vs domain / ef模型的理解程度。应用程序代码基本大小也有所不同。

也许你需要选择列表,也许你想将一些属性转换为不同的类型。使用它们的原因很多。但是,即使您使用AutoMapper之类的工具,它也会有更多的代码和映射代码。所以它们需要花费时间来实施,但也许它们可以解决问题并节省其他时间也许他们解决了安全问题?也许做它们作为视图模型可以帮助青少年理解?也许你宁愿在开始时设置一个viewmodel而不是在真正需要的时候转换代码?

一致性可能有所帮助,但做一些额外的工作可能不值得。对我而言,最佳做法不是最佳实践。

考虑项目和团队的成本和收益。例如。也许你的项目是内部的,没有人会试图通过向提交添加数据来破解

答案 1 :(得分:1)

选择ViewModel而不是DomainModel有几个原因。

1)首先是安全性。想象你有一个更改密码的视图。如果将域模型传递给视图。可能你暴露了许多不必要的属性,它可能会导致安全问题。没有理由公开LastLoginDate,IsActive,IsEnabled,NumberOfFailedLogin等属性,只需更改密码。

2)第二个原因是从视图中减少逻辑。如果将Domain类传递给视图,可能需要添加一些额外的逻辑来隐藏额外的属性或根据需要对其进行整形或根据路径等添加逻辑。

3)因为架构。将域模型暴露给视图会导致表示层和域模型之间的紧密耦合,这一点并不好。