使用 MVVM,每个 UI 窗口都有自己的 ViewModel 吗?

2023-12-14

当我在 MVVM 模式下设计多个视图时,每个视图是否都有自己的 ViewModel 还是它们都共享同一个 ViewModel?我知道这最终是一个灵活的决定,但最佳实践是什么?

我的直觉告诉我每个视图(即每个单独的 UI 窗口)都有一个 ViewModel。 MVVM 的所有博客示例都显示一个视图,但除此之外没有太多内容。


是的,基本上这个想法是你的 viewModel 应该只被一个视图使用。如果您使用 viewModel 来填充一个区域(例如在 ASP.NET MVC 中),则每次在不同位置呈现该视图时,该 viewModel 都会被“重用”。

This article是 Josh Smith 对 MVVM 模式的讨论。然后,沃德·贝尔 (Ward Bell) 在此讨论article他认为乔什遗漏了什么,同时坚称乔什的工作仍然非常出色。

沃德出色地阐述了这种模式的复杂性并展示了存在的紧张气氛。以下是他对紧张局势的看法:

根据我的经验,View 和 ViewModel 设计之间存在“对话”。 VM 的存在是为了服务于视图,即使它努力独立于任何特定的具体视图。如果没有可以使用虚拟机的视图,虚拟机就毫无用处;显然,VM 开发人员必须 请注意视图开发人员的咒语。

另一方面,在业务应用程序中,应用程序的命令(视图必须做什么才能满足业务需求)是程序员的职责,并且最好通过 ViewModel 的功能来表达。

这就是 View 和 ViewModel 设计之间必要的张力。作为一名开发人员,我效忠于 ViewModel(“应用程序应该做一些有价值的事情”),但以牺牲 View 为代价来捍卫这种效忠是愚蠢的(“良好的用户体验对于使应用程序易于学习和使用至关重要”)。使用”)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MVVM,每个 UI 窗口都有自己的 ViewModel 吗? 的相关文章

随机推荐

  • 将可编辑文本框添加到图表中的特定数据点

    我正在尝试实现可编辑文本框 chartjs 或融合图表中的解决方案都可以 在 fusioncharts 中尝试使用触发器捕获数据点上的用户点击事件 在此处检查 fusionchart 示例中的 jsfiddle dataPlotClick
  • Ansible - 将注册变量保存到文件

    如何将注册的变量保存到文件中 我从tutorial hosts web servers tasks shell usr bin foo register foo result ignore errors True shell usr bin
  • PDO:行名称作为结果数组的索引

    我有这个 旧式 非 PDO MySQL 查询 代码没有收紧 只是为了准确地显示我的意思
  • Azure 应用服务上具有 OWIN“SystemWeb”的 Web API 应用程序

    我正在创建使用 NET 中的 Identity 2 1 0 框架的应用程序 我在 Visual Studio 2015 中作为空 Web 应用程序 模板 启动了项目 现在 我用Microsoft AspNet WebApi Owin 并且M
  • 如何检查给定用户是否是内置管理员组的成员?

    我需要以编程方式 在 NET 中 检查给定用户 域帐户 是否是当前计算机 执行应用程序的计算机 上内置管理员组的成员 是否可以 我不了解 Net 但在win32中 简单的方法是调用IsUserAnAdmin 如果您需要更多控制 您可以打开进
  • 如何将 Flask+React 应用程序部署到 Azure Web 服务

    我一直在我的本地主机上开发这个应用程序 它以 Flask 作为后端 本地主机 5000 和 React 作为前端 本地主机 3000 而且他们沟通得很好 现在我应该把它放在网上 以便其他人也可以看到它 我在 Azure 上没有太多经验 但是
  • 在 silverlight 应用程序中显示 pdf。 PDF 到 XAML

    我需要创建 silverlight 应用程序 客户将在其中看到一些 pdf 文件 PDF 文件必须位于 silverlight 控件内 并且不能呈现为图像 客户想要选择文本 为此目的我需要一些free将 pdf 文件转换为 xaml 的库或
  • Keras 中损失函数的导数

    我想在 keras 中创建以下损失函数 Loss mse double derivative y pred x train 我无法合并衍生术语 我努力了K gradients K gradients y pred x train x tra
  • WiX ICE30 错误但目录正确

    我的 WiX 3 10 3 3007 项目有 2 个不同的 web config 文件 它们安装在 2 个不同的位置 我的构建中的 2 个错误是 错误 ICE30 目标文件 svcenub9 con Web config 由 LFN 系统上
  • 什么是 Docker 镜像“层”?

    我是 Docker 的新手 我正在尝试确切地了解 Docker 是什么image是 Docker 镜像的每个定义都使用术语 层 但似乎没有定义 层 的含义layer 来自官方Docker 文档 我们已经看到 Docker 镜像是启动 Doc
  • 如何让 Twig 将 HTML 输出写入文件而不是浏览器?

    我有一个想要渲染的 Twig 模板 html 文件 将标记替换为 PHP 文件中的值 然而 我不想将渲染结果发送到浏览器 而是将其写入新的 html 文件 我想 Django 模板的解决方案也是类似的 我怎样才能在 PHP 中做到这一点 您
  • 按位乘以 5/8 观察溢出

    我被分配了一大堆问题 这是唯一一个我不知道如何优化的问题 目标是乘以 5 8 舍入到 0 并防止溢出 运算顺序是乘以 5 然后除以 8 即 11 5 8 6 优化的目标是使用 12 个或更少的运算符 规定仅此而已 允许 gt 运算和8 位整
  • JTable -> TableModeListener

    我有这个JTable有一个DefaultTableModel作为它的模型 桌子上我有几个秋千组件 JComboBox and JCheckBox 通过设置在特定列上DefaultCellEditor and DefaultCellRende
  • SecCopyErrorMessageString 在 swift 中给出“使用未解析的标识符”

    尝试使用 SecCopyErrorMessageString 来解释 errorCode 迅速 var result OSStatus result SecItemAdd query as CFDictionary nil if resul
  • Firebase 与 Swift 对observeEventType 的使用不明确

    因为这个我一直在拔头发 转到包含相关事件和多个教程的所有页面 我发现这里的代码没有任何问题 但不知怎的 如果我打印出值 有效 或将它们分配为 它就不会失败 NSArray 然后给我一个空数组 snapshot value 的打印显示 fri
  • 在 Netbeans 中编译简单的新 CUDA 项目

    我在 Netbeans 中创建了新的 C Application 并想要编译简单的 CUDA 例如 include
  • C11可选功能宏在哪里?

    C11 标准中写道 编译器应该提供一些宏来测试可选功能的存在 我可以在哪些标题中找到它们 例如位于哪里 STDC NO VLA 对于 GCC 即 如果我尝试找到 STDC NO COMPLEX into complex h我在那里没找到 它
  • R - if 条件的子集数据

    如何使用逻辑条件对数据进行子集化 假设我有如下数据 我想对数据集进行子集化 第一个条件是所有动物都有 FCR 记录 然后我想将所有动物与新数据集中的这些动物放在同一个围栏中 animal Feed Litter Pen 1 0 2 5 3
  • Gearman:仍然没有办法从后台工作者检索自定义数据吗?

    首先 我知道this问题 Gearman 将数据从后台工作人员发送到客户端 我想知道 Gearman还是这样吗 我计划将一批图像 URL 从 PHP Web 应用程序发送到 gearman Worker 也是用 PHP 编写的 我们称之为
  • 使用 MVVM,每个 UI 窗口都有自己的 ViewModel 吗?

    当我在 MVVM 模式下设计多个视图时 每个视图是否都有自己的 ViewModel 还是它们都共享同一个 ViewModel 我知道这最终是一个灵活的决定 但最佳实践是什么 我的直觉告诉我每个视图 即每个单独的 UI 窗口 都有一个 Vie