我有一个项目,其中 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(使用前将#替换为@)