oop - MVP 或 MVC 模式中的代表性数据放在哪里?
问题描述
在 MVP 和 MVC 模式中,您希望清楚地将视图与模型分开。
但是要显示图标、在发生某些事情时应该播放的动画等内容,模型需要告诉视图它想要如何表示。例如,选择元素的按钮上的图标。
因此,我认为图像、动画帧数据等内容应该是模型的一部分,因为模型的元素需要定义它。但我也觉得不应该这样。因此,我唯一能想象的就是在某处存储一个巨大的映射,将模型的类型映射到代表性数据。这对我来说似乎是一个巨大的反模式。
您将如何在项目中构建这些东西?“应该怎么看”的数据存储在哪里?在 Model 内部、Presenter 内部(映射)或 View 内部(映射)。也许我在这里遗漏了一些重要的东西。
为了澄清这是从哪里来的:
考虑您有由列表中的图标表示的对象。这些对象都有一个共同的超类型,但每个都在细节上不同,因此应该用不同的图标表示。此外,也许您将所有内容都实现为通用类型并仅在构建期间定义它的整个行为或在运行时设置内容,因此您甚至无法区分图标以通过类型显示。因此,我认为这些对象需要像“getImage”这样的访问器来获取它们希望在 GUI 中具有的表示。但是让图像成为模型的一部分似乎是错误的。
为了提供形成答案的常用方法,可以在以下目录中构建虚构项目:
src/model/
src/view/
src/presenter/
每个类型/类和哪些方法会位于哪里?
解决方案
您将如何在项目中构建这些东西?“应该怎么看”的数据存储在哪里?
这是我使用ViewModel
. 您将您的映射Model
到ViewModel
并使用ViewModel
来表示要显示的属性。您可以定制ViewModel
:
- 样式/css 属性,
- 结合属性,
- 验证逻辑,
- 更改属性的显示方式等等。
每个类型/类和哪些方法会位于哪里?
源/视图模型
推荐阅读
- r - 在 R 中转置和创建新变量
- swiftui - 条件子视图的 SwiftUI 转换
- excel - 在 VBA SeriesCollection 中设置系列值的问题
- blazor-client-side - 使用对象列表中的值填充 MatBlazor MatAutocompleteList
- gnuplot - gnuplot 不显示数据框
- vim - VsCode VIM - 如何打开“新的无标题文件”
- javascript - Javascript .toLocaleString() 不支持“2 位”
- r - 有没有一种简单的方法可以将 dplyr 汇总函数结果添加到每一行?
- c# - 如何找出字节的格式?南音频
- python - Keras 适合生成器 - ValueError:无法找到可以处理输入的数据适配器