小编典典

ViewModel 最佳实践

all

基本上,我有以下问题:

  1. 我通常喜欢有一个类/文件。 如果创建ViewModel 只是为了将数据从控制器传递到视图,这对它有意义吗?
  2. 如果 ViewModel 确实属于它自己的文件,并且您使用目录/项目结构来保持独立,那么 ViewModel 文件属于哪里?在 控制器 目录中?

目前基本上就是这样。我可能还有一些问题要问,但这在过去一个小时左右一直困扰着我,我似乎可以在其他地方找到一致的指导。

编辑: 查看 CodePlex 上的示例NerdDinner 应用程序,看起来
ViewModels
Controllers的一部分,但它们不在自己的文件中仍然让我感到不舒服。


阅读 85

收藏
2022-05-30

共1个答案

小编典典

我为每个视图创建了我称之为“ViewModel”的东西。我将它们放在我的 MVC Web 项目中名为 ViewModels
的文件夹中。我以它们所代表的控制器和操作(或视图)来命名它们。因此,如果我需要将数据传递给 Membership 控制器上的 SignUp
视图,我会创建一个 MembershipSignUpViewModel.cs 类并将其放入 ViewModels 文件夹中。

然后我添加了必要的属性和方法,以方便将数据从控制器传输到视图。我使用 Automapper 从我的 ViewModel 到 Domain Model
并在必要时再次返回。

这也适用于包含其他 ViewModel 类型的属性的复合 ViewModel。例如,如果您在成员控制器的索引页面上有 5
个小部件,并且您为每个局部视图创建了一个 ViewModel - 您如何将数据从索引操作传递给局部视图?您向 MyPartialViewModel 类型的
MembershipIndexViewModel 添加一个属性,并且在渲染局部时您将传入 Model.MyPartialViewModel。

这样做可以让您调整部分 ViewModel 属性,而无需更改索引视图。它仍然只是在 Model.MyPartialViewModel
中传递,因此当您所做的只是向部分 ViewModel 添加属性时,您必须通过整个部分链来修复某些东西的可能性较小。

我还将命名空间“MyProject.Web.ViewModels”添加到
web.config,以便允许我在任何视图中引用它们,而无需在每个视图上添加显式导入语句。只是让它更干净一点。

2022-05-30