ASP.NET MVC:将 ViewModel 相互嵌套,是否存在反模式?

2023-12-04

我有一个项目,其中 ViewModel 相互嵌套,因此它们本质上是域层次结构的字符串类型复制。例如,如果我们的域具有以下关系:

组织有 1 到多个环境

环境有 1 到多台机器

那么将会有一个 OrganizationViewModel,其中包含一对多的 EnvironmentViewModel,并且 EnvironmentViewModel 本身将具有一对多的 MachineViewModel。然后,这种类型的层次结构会在整个应用程序中重复使用,大约有五个这种类型的 ViewModel 之一。 (例如,EnvironmentViewModel 用于多个页面,MachineViewModel 也用于其中许多页面,具体取决于正在查看的层次结构的级别...为了讨论的目的,我对此进行了简化,但层次结构比上面的 3 个稍大一些)。

现在,尽管我很想从上层下来谴责这种做法,但我找不到太多关于这方面的信息。谁能告诉我有关既定做法的更多细节?有什么轶事可以分享吗?

(我自己的偏见是,这些 ViewModel 不应该以这种方式相互嵌套,并且 ViewModel 实际上应该对应于 View,而不是域对象。我发现它非常混乱,存在一些可维护性问题。但我想了解其他人的想法或经历。)

我已附加此问题以供参考,但它描述了将域对象嵌套在视图模型中,而不是视图模型之间的嵌套。


视图模型应该尽可能平坦(尽管用于逻辑分组多个相关属性的嵌套不可变对象对于整理目的是可以的)。

不要将其视为“视图模型应该对应于视图”,而是以相反的方式思考:“视图是视图模型数据的 html 表示”。

ViewModel这是一个可怕的术语,因为它不是视图,也不是模型,而是资源的表示。

If I do:

`GET /User/1`

我希望返回一些代表用户 1 的数据。如果是 HTML 格式,因为我发送了

`Accept: text/html`

那就这样吧。考虑一下您的视图模型在 XML 或 JSON 中的样子。

在创建依赖链时尝试避免嵌套视图模型,只需复制属性,实际上并没有违反 DRY

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

ASP.NET MVC:将 ViewModel 相互嵌套,是否存在反模式? 的相关文章

  • 如何在 Spring MVC 中使用延迟加载

    Spring MVC中如何使用延迟加载 我现在正在使用 eager 但这会使我的应用程序运行速度变慢 这是我的域的一部分 ManyToMany fetch FetchType EAGER JoinTable name NEWS TAG jo
  • 如何使用 Swing GUI 启动 Java MVC 应用程序

    假设我们有一个简单的 Java MVC 应用程序 其中包含以下类Model View and Controller The View类直接继承自JFrame http docs oracle com javase 7 docs api ja
  • ExtJs 5 网格存储/视图模型绑定:无法修改 ext-empty-store

    我正在为这个拔掉头发 我有一个带有一些网格 一个商店和一个 viewModel 的视图 我需要不同网格中商店的不同过滤版本 因此我尝试将每个过滤商店绑定到网格 现在我什至无法让商店加载到网格中 我的代码如下所示 Store Ext defi
  • PHP 中使用 MVC 的 Post-Redirect-Get (PRG) 最佳实践

    PRG 模式与 MVC 是否有最佳实践 在本教程中 http www theserverside com news 1365146 Redirect After Post http www theserverside com news 13
  • PHP 设计模式

    好的 我想首先让您注意到我一直在寻找 php mvc 设计模式 所以我还没有真正找到我想要的东西 现在 在写我的问题时 我找不到我要问的任何相关且具体的问题 但我知道我可能是错的 无论如何考虑这个问题和一个可能有用的问题包 Question
  • ASP.NET MVC C#:将多个表/查询中的数据引入视图中

    好吧 我仍在掌握 ASP NET 和 MVC 框架的窍门 并将我的知识从经典的 ASP 和 VB 转换过来 所以请保持温柔 我的第一个视图 home details X 运行良好感谢之前的帮助为我指明了正确的方向 https stackov
  • Ember JS 过渡到嵌套路由,其中​​所有路由都是视图中的动态段

    我们正在使用 EmberJS 编写一个应用程序 然而 我们对这个框架仍然陌生 我们很难解决一些看似简单的问题 模型非常简单 有 3 个模型 Queue Task 和 Image 我们对所有路由使用动态 URI 段 并且这些模型的路由嵌套在以
  • MVC:业务逻辑放在哪里? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 首先 我看到了很多这方面的问题 但背后的推理还不够 如果我的问题不够好并且应该被删除 我会理解 我看过 例如 this https stacko
  • Room - LiveData 观察器在数据库更新时不会触发

    我试图在下面的代码中找出 为什么在我用新数据填充数据库后 Room 的 LiveData observable 不会给我新的转变 这是放在我的活动的 onCreate 方法中 shiftsViewModel ViewModelProvide
  • 您对 Javascript MVC 框架有何建议? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 注销按钮在 mvc 应用程序中不起作用

    我有一个具有不同用户帐户和密码的 MVC 应用程序 登录功能工作正常 但当我单击注销按钮时 出现 404 错误 应用程序中的服务器错误 无法找到该资源 描述 HTTP 404 您正在查找的资源 或其依赖项之一 可能已被删除 名称已更改或暂时
  • Java 和 GUI - 根据 MVC 模式,ActionListener 属于哪里?

    我目前正在编写一个模板 Java 应用程序 不知何故 如果我想完全遵循 MVC 模式 我不确定 ActionListener 属于哪里 该示例基于 Swing 但它不是关于框架 而是关于 Java 中 MVC 的基本概念 使用任何框架创建
  • 根据 MVC,哪种项目结构是正确的? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我注意到诸如flask通常有一个名为views容纳 app route def index return render template ind
  • Bean 属性不可读或具有无效的 getter 方法

    因此 我的任务是为注册表路由编写一个简单的 Web 应用程序 使用 Spring MVC 所以我有 路线 类 我想在其中保留起点 终点和中间点列表 但我不明白如何将值从 jsp 放入列表 例如使用 jstl 所以我决定解析一个字符串 pub
  • “纯”MVC 实现有多大用处?

    我在一家提供类似 CRM 的定制软件的公司工作 我们目前正在重新设计 重新开发该软件 希望它看起来更现代 并且更容易为未来的客户开发和定制 目前 定制每个新应用程序都需要很长时间 有一种假设是 花费这么长时间的原因是 视图 层中存在大量业务
  • Spring MVC http 500错误apache

    上面是我的程序的目录层次结构 我是 Spring 新手 正在学习 MVC 概念 我编写了一个程序 它将输入 名称 输入文本框并打印 Hello name 以下是我的目录结构和我创建的各种文件 web xml
  • backbone.js:视图中影响集合中不同模型的按钮

    我刚刚开始使用backbone js 到目前为止 我真的很喜欢它 我有这样的事情 ModelA ModelB ViewA ViewB ModelA 持有 ModelB 的集合 如何使用按钮构建模型 B 的视图 单击该按钮会更改集合中下一个
  • javax.validation.ConstraintViolationException:在更新前验证时违反了 Bean 验证约束

    我在尝试使用 JPA 2 0 SpringMvc 3 0 在多对多关系中插入新元素时遇到烦人的错误消息 我有一张与州有关的桌子 另一张与人有关的桌子 一个人可以与许多国家联系起来 一个国家可以与许多人联系起来 在这种特殊情况下 我有一个 l
  • 如何解决 MVC 中的“访问令牌已过期,但我们无法刷新它”

    我目前正在研究谷歌API其目的是获取登录者的圈子 我已经有了访问令牌但问题是每当我尝试运行我的代码时它都会返回此异常 访问令牌已过期 但我们无法刷新它 我该如何解决这个问题 var claimsforUser await UserManag
  • Microsoft MVC:手动触发表单验证

    有谁知道是否有办法手动触发 Net MVC 应用程序中的客户端表单验证 我想做以下事情 我已经查看了 MicrosoftMvcValidation js 中的代码 但没有找到可以在表单上调用的方法 我认为您正在寻找的验证可以在这里找到 ht

随机推荐

  • 使用“grep -f”列出不匹配的条目

    以下命令给出了匹配表达式的列表 grep f tmp list Filename gt tmp output The list然后解析文件并用于搜索Filename 对于解析后的字符串 然后将结果保存到output 我将如何输出解析后的字符
  • Pandas excel导入更改日期格式

    我正在学习 python 3 6 with anaconda 以进行学习 我使用 pandas 导入一个包含 2 列的 xls 文件 日期 dd mm yyyy 和价格 但 pandas 改变了日期格式 xls file pd read e
  • 如何处理Java中的链接错误?

    在开发一个高度基于 XML 的 Java 应用程序时 我最近在 Ubuntu Linux 上遇到了一个有趣的问题 我的应用程序 使用Java插件框架 似乎无法转换dom4j 创建 XML 文档Batik sSVG 规范的实现 在控制台上 我
  • 如何在 Windows 控制台上输出 Unicode 字符串

    已经有一些与此问题相关的问题 我认为我的问题有点不同 因为我没有实际的问题 我只是出于学术兴趣而问 我知道 Windows 的 UTF 16 实现有时与 Unicode 标准 例如排序规则 相矛盾 或者更接近旧的 UCS 2 而不是 UTF
  • C++:如何在使用 getline() 和 ifstream 对象从文件中读取行时跳过第一个空格?

    我有一个名为 items dat 的文件 其内容按 itemID itemPrice 和 itemName 的顺序排列 item0001 500 00 item1 name1 with spaces item0002 500 00 item
  • 保存 VBA 之前检查文件夹权限

    我创建了一个用户表单 它将打开一个 Excel 文件 打开并隐藏 Excel 关闭用户表单时将保存并关闭 Excel 文件 然而 Excel 文件有两种类型的用户 编辑者 将数据输入文件的人员 查看者 正在查看文件的人 包含 Excel 文
  • 使用MSBuild构建EXE时如何指定文件版本?

    我正在尝试使用 MSBuild Delphi 2010 编译 EXE 我尝试了以下方法 MSBuild exe t Clean Build p config Release ExtraDefines CodeTest property Fi
  • 查找c++执行时间

    我很好奇 C 中是否有内置函数来测量执行时间 我现在使用的是 Windows 在 Linux 中这非常简单 据我所知 Windows 上最好的方法是使用QueryPerformanceCounter and QueryPerformance
  • 我是否需要心跳来保持 TCP 连接打开?

    我有两个通过 TCP IP 进行通信的组件 组件 A 充当服务器 侦听器 组件 B 充当客户端 两人应该尽快沟通 任何时候只能有一个连接 尽管这是这个问题的一部分 我公司的一位高级开发人员表示 我需要在两个组件之间使用应用程序级心跳来确保连
  • SVN 中工作副本 XXX 已锁定且清理失败

    当我执行以下操作时出现此错误svn update 工作副本 XXXXXXXX 已锁定 请 执行 清理 命令 当我运行清理时 我得到 清理无法处理 以下路径 XXXXXXX 我该如何摆脱这个循环 一种方法是 将编辑的项目复制到另一个位置 删除
  • 为什么我需要对这个 .rds 文件使用 mode = wb 和 download.file() ?

    我被挂断了闪亮的应用程序教程第 5 课因为我无法打开counties rds file readRDS threw error reading from connection 我发现我可以打开 rds如果我下载它就好了download fi
  • 用python计算股票的平衡交易量(OBV)

    我正在用 python 做我的第一个项目 我有一个名为 df 的 pandas 数据框 有两列 close 和 volume 我想根据前两列计算 获取 OBV 列 公式如下 如果收盘价高于前一收盘价 则 当前 OBC 先前 OBC 当前交易
  • 将控制台分成两部分以获得两个输出

    我正在创建一个控制台应用程序 我希望有两个输出和一个输入 原因是一个输出始终可见 This is the first output Text flows upwards just like a regular console applica
  • c中opencv中轮廓/对象的质心?

    有没有一些更好的方法可以在 opencv 中找到轮廓的质心 而不使用内置函数 虽然 Sonaten 的答案是完全正确的 但有一个简单的方法可以做到这一点 使用专用的 opencv 函数 moments http opencv itseez
  • 使用 javascript 更改文本区域换行

    对于我的小型 wiki 应用程序 我主要需要使用文本区域来编辑内容以使用软 或虚拟 换行 但是 在某些情况下 最好不包装内容 我想我可以通过简单地使用一个按钮来关闭包装来做到这一点 这是简化的代码
  • 将自定义图标添加到 Woocommerce 购物车和结帐中的运输选项

    我想将图标添加到 Woocommerce 购物车和结账中的运输选项 例如 在 本地取货 选项中 我想在选项旁边显示一个小商店图标 如下所示 https ibb co jz0jJgk 我尝试在 Woocommerce gt 设置 gt 运输选
  • 谁创建了索引?

    是否可以检查谁在 SQL Server 上创建了索引 我只找到列出时间的脚本 select STATS DATE so object id index id StatsDate si name IndexName schema name s
  • 为 Angular 2 身份验证启用 WebAPI CORS

    我在 stackoverflow 上看到了一些答案 但我迷路了 我有 webapi 2 独立的 Angular 2 webapi项目来自模板 我唯一改变的是我添加了 CORS 并将以下行添加到 IdentityConfig cs gt Ap
  • 如何创建可在 Bootstrap 3 中缩放的响应式图像

    我目前正在使用 twitter bootstrap 3 并且在创建响应式图像时遇到问题 我用过img responsive班级 但图像尺寸并未放大 如果我使用width 100 代替max width 100 然后它就完美地工作了 哪里有问
  • ASP.NET MVC:将 ViewModel 相互嵌套,是否存在反模式?

    我有一个项目 其中 ViewModel 相互嵌套 因此它们本质上是域层次结构的字符串类型复制 例如 如果我们的域具有以下关系 组织有 1 到多个环境 环境有 1 到多台机器 那么将会有一个 OrganizationViewModel 其中包