问题标签 [view-model-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
702 浏览

asp.net-mvc - ASP.NET MVC - 视图模型模式

我只使用 MVC 框架 (ASP.NET MVC2/3/Razor) 几个月了,我真的很喜欢它,但是我很难找出视图模型的标准。在我的项目中,我有一个 Models 文件夹(包含我的数据模型 - Linq DBML、Repository[ies]、Extension methods)和一个 Models/ViewModels 文件夹。我的视图模型通常是可重用的类,它们通常只包含 LINQ 对象或我需要访问特定视图的对象集合的简单 get/set 属性。

现在我遇到的问题是弄清楚何时创建视图模型。我的目标是尽可能频繁地使用 LINQ 对象作为视图模型,尤其是当它是一个编辑操作时。我的问题是,如果我有其他可能只想用于显示目的的数据怎么办?我不喜欢使用 ViewData/ViewBag 集合,因为访问这些集合的成员需要了解集合项的密钥(设计师/前端人员不容易“猜测”)。我也不喜欢为每个视图创建一个 ViewModel 的想法,因为它看起来像是不必要的混乱代码。

例如,假设我有一个员工的数据模型,并且我想显示一些与该员工无关的信息——例如,站点统计信息、动态菜单以及您能想到的任何其他可能来自数据库的信息。我应该通过什么模型 /Employee/Edit 操作?Employee 对象和一堆 ViewData[] ,还是一个自定义的 EmployeeView?

有黄金标准吗?我错过了什么?你在做什么不同的事情,我应该调查一下?提前致谢!

0 投票
1 回答
812 浏览

wpf - ViewModel 定位器如何在模块化系统中工作

当我做 MVVM 应用程序时,我通常有一个与服务定位器模式配合使用的中央 ViewModel 定位器。这允许我通过 Ninject 向 ViewModel 注入服务

我的 ViewModel 定位器通常如下所示:

现在我正在考虑添加另一个名为“订单”的模块。所以我会有一个 OrderViewModel(或者在现实生活中的几个)。我想让它们通过 MEF 分离和导入。

我如何扩展/更改这种方法以能够使用中心视图模型定位器和导入的视图模型和视图。

是的,我知道 Prism 和 Caliburn,但看到这种方法对我来说会很有趣......

谢谢你的帮助....

0 投票
2 回答
185 浏览

asp.net-mvc - 关于 asp.net MVC 视图模型模式的几个问题

我是 MVC 的新手。

我已经阅读了这篇简短的文章,详细介绍了在 MVC 中处理视图模型的三种方法:

http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx

在我看来,它的要点是:

方法 1,从数据库中拉出一个对象并将其用作您的视图模型。快速而简单,但是如果您想要来自多个表的数据,那么您完全搞砸了(如果没有方法 2,我想不出办法)。

方法 2,创建一个引用多个对象的类,并将其用作您的视图模型。这样您就可以访问所需的一切。文章说,当视图变得复杂时,它会由于域/视图模型对象之间的阻抗不匹配而崩溃……我不明白这是什么意思。谷歌搜索阻抗不匹配返回了很多东西,其要点是您使用对象来表示数据库内容,而内容并没有干净地映射,但即使使用方法 1,您也可能会遇到这个问题。不确定我是什么失踪。在我看来,从维护的角度来看,为每个视图创建一个类以获取所需的数据并不理想,不确定您是否有选择。

方法 3,我仍然对它有所了解,但我不太明白为什么他们的复选框示例在方法 2 中不起作用,如果您在未连接到域模型的类中添加了 bool addAdditional。方法 3 似乎是说而不是直接返回域的东西,只是拉出你特别需要的属性,我认为这更好,但会更难维护,因为你需要一些大型构造函数this.x = domain.xthis.y = domain.y等等。

我不了解构建器,特别是为什么使用该界面,但会继续努力。

编辑:我刚刚意识到这不是一个真正的问题,我的问题是,我的想法是否正确?

0 投票
3 回答
2259 浏览

asp.net-mvc-3 - MVC:Repository 和 Viewmodels 一起模式以获得更好的结构?

如果我想结合使用每个实体的存储库和每个视图的 Viewmodels,它是如何工作的?

我可以查找任何网站提示吗?也许有人可以举一个简单的例子吗?

谢谢

最好的祝福!

0 投票
1 回答
821 浏览

asp.net-mvc-3 - 使用多个实体保存视图的 MVC3 最佳实践

给定一个使用 ViewModel 模式和带有实体框架的 Repository 模式的 MVC3 应用程序。

如果我有一个由多个实体组成的创建和更新视图,那么保存数据的最佳做法是什么?

我应该使用抽象服务层保存日期,该服务层将使用其各自的存储库保存每个实体的数据,还是应该使用存储过程将数据保存在存储库中?

我愿意接受任何建议或建议。

提前致谢!

0 投票
2 回答
479 浏览

asp.net-mvc - 如何为下拉列表添加自定义查询并保留视图模型模式?

我读过很多文章,他们说查询不应该放在控制器中,但我似乎看不出我还能把它放在哪里。

我当前的代码:

风景:

如何保留视图模型和查询并排除不应显示的用户类型?

0 投票
3 回答
162 浏览

c# - ViewModel 会降低 Web 应用程序的性能吗

据我所知,使用视图模型可以使 Web 开发。生活更轻松,从某种意义上说,我们可以使用这种方法在本地化字符串中只显示需要的属性。我还在 mvc3 视图模型中使用 jquery 验证等。

现在我很怀疑,因为我的 webapp 遇到了真正的瓶颈。像这样查询所有对象(其中 20 个)

并且该属性对象列表被发送到我的 ViewModel,其中 FromDomainModel 期望像这样的属性对象列表

现在在我正在使用的同一个班级

但是使用这种方法将对象集合发送到视图模型,从那里返回相同的视图模型,只需要我需要的几个属性,奇怪的是(至少对我来说)我经历了多个实体负载和持续时间急剧增加。

如果您需要更多信息。请问。

另外,如果您知道更好的解决方案,请分享。

更新: 当使用域模型时,我加载了 20 个实体,当使用上述视图模型时,加载了 67 个实体,这大大降低了性能。

0 投票
3 回答
1820 浏览

wpf - 多个视图模型相互交互

我正在开发一个 Surface WPF 项目,我们尝试在其中实现 MVVM 模式。在这个项目中,我们正在构建一些我们绑定到不同视图模型的自定义控件。

例如,我们有一个设置控件,它有一个设置视图模型,我们有一个主视图模型,它是“整体”视图模型。

在我们的 surfacewindows.xaml 页面中,我们使用 mvvm-light 中的视图模型定位器将数据上下文设置为主视图模型。此外,在我们的 surfacewindow.xaml 中,我们添加了设置控件,并在控件上将 datacontext 设置为设置视图模型。

现在我们需要两个视图模型相互交互:当前的情况是我们需要设置设置控件的可见性。我们在主视图模型上有一个属性,它是一个布尔值 (IsSettingsControlVisible),它通过使用转换器将布尔值转换为可见性对象来绑定到控件的 Visibility 属性。

当我们需要通过单击设置控件上的关闭按钮将可见性设置为不可见时,现在出现了问题。因为我们已经将控件上的数据上下文设置为设置视图模型,所以我们无法访问主视图模型。

到目前为止,我们所想到的是将设置视图模型作为属性添加到主视图模型中,并从设置控件中删除数据上下文。在设置控件中,我们将使用绑定作为 SettingsProperty.Property。比我们也可以从设置控件访问主视图模型。那有意义吗?有没有更好的方法来进行这种互动?

我真的很想听听你关于如何让这些互动发生的想法。

0 投票
2 回答
1179 浏览

.net - 我应该对视图模型上的方法或命令进行单元测试吗?

我刚看完Jason Dolinger 在 MVVM 上的视频,我想澄清一下如何正确设置和单元测试我的视图模型的 ICommand 属性。

考虑以下带有 FooBarCommand ICommandProperty 的 ViewModel 类。

因此,如果我对 ViewModel 的 FooBar 功能进行单元测试,我可以通过调用 testVM.FooBar() 或通过调用 testVM.FooBarCommand.Execute() 执行命令来运行 FooBar()。哪个是首选?我倾向于测试 FooBarCommand 属性,因为最终视图上的按钮被绑定到 FooBarCommand 属性而不是 FooBar() 方法。

此外,由于我的 View 将绑定到 IViewModel 而不是 ViewModel,我应该能够从 IViewModel 接口中省略 FooBar() 方法完全正确吗?

0 投票
3 回答
1614 浏览

asp.net-mvc - 使用多个 List<> 填充 mvc4 视图模型

我有一个包含 22 个类别的列表,每个类别大约有 8 个菜单项,但我的视图模型最终只有列表中的最后一项。我很难看出问题出在哪里。
在这一点上,我确定问题在于我如何填充视图模型,但我不知道问题出在哪里。

视图模型: