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 相互嵌套,是否存在反模式? 的相关文章

  • 服务层或存储库中的密码哈希等?

    作为 MVC 的最佳实践 在发送到数据库之前处理密码散列 加盐或数据格式化等事务的逻辑应该放在哪里 我读到存储库应该仅用于处理数据访问的逻辑 这是属于服务层的东西吗 控制器 这还重要吗 我倾向于将散列放在存储库层中 如果只是出于实际原因 即
  • Joomla 模型视图控制器 (MVC) 如何工作?

    我是 Joomla 的新手 我想知道 Joomla 控制器如何将数据传递给模型 模型传递给控制器 以及控制器传递给视图 虽然这可能是一个愚蠢的问题 但我确实试图找到答案 我希望我能从 stackoverflow 大家庭得到一些帮助 控制器获
  • mvc 中的模型(最佳实践,PHP)

    我知道有很多关于 MVC 和最佳实践的文章和问题 但我找不到这样的简单示例 假设我必须用 PHP 开发一个 Web 应用程序 我想遵循 MVC 模式 没有框架 该应用程序应该有一个简单的书籍 CRUD 我想从控制器获取我商店中的所有书籍 保
  • Node 和 General 中的 MVC:模型如何与视图绑定?

    我从 node js 开始 正在制作一个简单的 MVC 框架 到目前为止 我已经有一个前端控制器 或 调度程序 如果你愿意的话 可以工作 路由通过调度程序配置模块进行 如图所示 我的问题在最后 紧接代码之后 另外 这是学习node的练习 请
  • 您对 Javascript MVC 框架有何建议? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • MVC和依赖注入,被迫使用单例Controller?

    我正在致力于构建一个根据 MVC 原则运行并利用依赖注入的 PHP 框架 我想我已经把前端控制器部分放下了 有一个工作路由器实例化控制器实例并根据请求的 URI 调用适当的操作 接下来是依赖注入 我想实现一个使用反射解决依赖关系的容器 这样
  • 绑定到 ViewModel 时如何更新 Model?

    我有一个 HttpPost 操作方法签名如下 HttpPost public ActionResult Edit ExistingPostViewModel model Save the edited Post 现在 在过去 当我没有使用
  • iOS模型层通知Controller对象

    https developer apple com library archive documentation General Conceptual DevPedia CocoaCore MVC html https developer a
  • 在 MVVM 中,可以在视图后面的代码中访问 ViewModel 吗?

    在 MVVM 模式中 是否可以接受甚至可以访问视图代码后面的 ViewModel 属性 我有一个可观察的集合 它填充在 ViewModel 中 我需要在视图中使用它来绑定到带有链接列表的无限滚动条 IE private LinkedList
  • Yii:使用与控制器布局不同的布局渲染动作

    在 Yii 中 有没有办法使用不同的方式渲染单个动作layout比为控制器定义的值 我有一个操作希望其格式与其他操作不同 并且文档中不清楚这是否可能 我相信您可以调用该操作 layout多变的 public function actionY
  • 如何使用 IHttpActionResult 设置标头

    我想将令牌添加到 webapi 请求的标头中 我怎样才能做到这一点 这是我的示例代码 public IHttpActionResult Authenticate Login data var Token fdsf123546fskjhf g
  • JavaFX 中的 MVC 模式与场景生成器

    我是 JavaFX 新手 根据我当前的设置 正在努力创建合适的 MVC 架构 我使用 Scene Builder 单击了一个 UI 并指定了一个 Controller 类 Startup public class Portal extend
  • ArgumentMatchers.any 不得为 null

    我正在尝试测试ViewModel以确保实时数据得到正确更新 然而使用时ArgumentMatchers any 它失败了IllegalStateException saying ArgumentMatchers any mViewModel
  • MVC 框架中的缓存策略?

    我编写了自己的小型 PHP MVC 框架 现在正在探索 PHP MVC 框架中的缓存策略 我正在考虑可以缓存什么 在哪里以及如何缓存 我的框架是简单的MVC框架 我有前端控制器 它启动应用程序 注册类自动加载 设置 php 运行时指令 最后
  • Knockout.js:有条件绑定div的title属性

    我的页面上有一个 viewModel 它保存一些设备当前状态概述的数据 到目前为止 除了一个问题之外 一切都运行良好 我需要根据 viewModel 中的另一个值设置 div 元素的 title 属性 我知道您基本上可以像这样设置 titl
  • 服务器端MVC+客户端MVC

    一个应用程序既是JS密集型的 又具有复杂的业务逻辑 庞大的数据流 使用backboneJS来构造JavaScript代码 并且还需要服务器端MVC 在本例中是Spring 与客户端 MVC 主干 一起实现服务器端 MVC spring 是一
  • 如何将 Stripe 支付网关集成到 ASP.NET MVC

    我想整合条纹PSP https stripe com 到我的 ASP NET MVC 应用程序中 在你用寻找具有相同问题的问题来折磨我之前 我确实寻找过上述问题 但它们似乎已经过时了 我尝试按照 stripe 网站上的程序进行操作 但 ja
  • Spring MVC 控制器中的硬编码@RequestMapping URL

    我正在研究 Spring 3 并在一个简单的 Web 应用程序中使用它 现在我正在使用注释实现 Spring MVC 控制器 我想知道 有没有使用的最佳实践 RequestMapping注解 我的意思是 我发现通常这个注释中映射的 URL
  • 如何在 Ember 中构建递归视图?

    在我的应用程序中 我有一个名为block它可以包含其他内容并被其他内容包含block项目 为了简单起见 我们假设这些块可以无限嵌套 我想知道是否可以创建与嵌套块相对应的递归视图 每个视图都会被渲染为DIV包含其子级并驻留在其父级内部DIV
  • Demandware MVC 概念

    我是 Demandware 的新手 我正在从 Magento 切换到 Demandware Demandware 不是开源的 我没有得到适当的教程 无法理解它的概念 我来自 Magento 所以我知道 Magento MVC 结构 但在 D

随机推荐

  • 使用“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 其中包