【问题标题】:View and ViewModel best practiceView 和 ViewModel 最佳实践
【发布时间】:2018-06-02 11:55:46
【问题描述】:

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

我试图用谷歌搜索它,但没有人谈论它,我在上面运行的每一篇文章都只是解释了 ViewModel 的用途,我知道 ViewModel 的主要用途是让您可以传递多个模型来查看。

【问题讨论】:

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


【解决方案1】:

这取决于。

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

也许您需要选择列表,也许您想将某些属性转换为不同的类型。使用它们的理由很多。但是,即使您使用 AutoMapper 之类的工具,它也是更多的代码和映射代码。所以他们需要时间来实施,但也许他们可以解决问题并节省其他时间?也许他们解决了安全问题?也许将它们全部作为视图模型来帮助后辈理解?也许您宁愿在开始时设置视图模型而不是稍后在真正需要时转换代码?

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-14
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 2013-05-09
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多