View 和 ViewModel 最佳实践

View and ViewModel best practice

我怀疑每个视图是否应该有自己的 ViewModel,或者我应该在不需要 ViewModel 的地方传递普通模型(我担心的是,如果我开始混合这两个概念,我稍后会以丛林结束)?

我尝试 google 它但没有人谈论它,每个 post 我 运行 它们只是解释 ViewModel 的目的,我知道 ViewModel 的主要目的是为了让你可以传递多个模型来查看。

视情况而定。

在许多用例中,主要目的不是公开字段以绑定用户不应更新的表单提交。我不会在不需要时盲目地创建它们,但这取决于开发人员以及他们对何时以及为何使用视图模型与 domain/ef 模型的理解水平。应用程序代码库大小也会有所不同。

也许您需要 select 个列表,也许您想将某些属性转换为不同的类型。使用它们的原因有很多。然而,即使您使用像 AutoMapper 这样的工具,它也是更多的代码和映射代码。所以他们花费时间来实施,但也许他们解决问题并节省其他时间?也许他们解决了安全问题?也许将它们全部作为视图模型来帮助初级理解?也许您宁愿在开始时设置视图模型,也不愿在真正需要时再转换代码?

一致性会有所帮助,但做一堆额外的工作可能不值得。对我来说最好的做法对你来说不是最好的做法。

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

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

1) 首先是安全。假设您有一个更改密码的视图。如果将域模型传递给视图。可能您公开了很多不必要的属性,这可能会导致安全问题。没有理由仅仅为了更改密码而公开 LastLoginDate、IsActive、IsEnabled、NumberOfFailedLogin 等属性。

2) 第二个原因是从视图上减少了逻辑。如果您将域 class 传递给视图,您可能需要添加一些额外的逻辑来隐藏额外的属性或根据需要调整它或添加基于路由等的逻辑

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