【问题标题】:Where is representative data placed in the MVP or MVC pattern?MVP 或 MVC 模式中的代表性数据放在哪里?
【发布时间】:2019-04-03 15:08:29
【问题描述】:

在 MVP 和 MVC 模式中,您希望清楚地将视图与模型分开。

但是要显示图标、当事情发生时应该播放的动画等内容,模型需要告诉视图它想要如何表示。例如选择元素的按钮上的图标。

因此,我认为图像、动画帧数据等内容应该是模型的一部分,因为模型的元素需要对此进行定义。但我也觉得不应该这样。因此,我唯一能想象的就是在某处存储一个巨大的映射,将模型的类型映射到代表性数据。这对我来说似乎是一个巨大的反模式。

您将如何在项目中构建这些内容? “应该怎么看”的数据存储在哪里?在 Model 内部、Presenter 内部(映射)或 View 内部(映射)。也许我在这里遗漏了一些重要的东西。

澄清这是从哪里来的:

假设您有由列表中的图标表示的对象。这些对象都有一个共同的超类型,但每个都有不同的细节,因此应该用不同的图标表示。此外,也许您将所有内容都实现为通用类型并仅在构建期间定义它的整个行为或在运行时设置内容,因此您甚至无法区分图标以通过类型显示。因此,我认为这些对象需要像“getImage”这样的访问器来获取它们希望在 GUI 中具有的表示。但是让图像成为模型的一部分似乎是错误的。

为了提供一种形成答案的常用方法,想象中的项目可以在以下目录中构建:

src/model/
src/view/
src/presenter/

每个类型/类的位置在哪里?

【问题讨论】:

    标签: oop model-view-controller mvp


    【解决方案1】:

    您将如何在项目中构建这些内容?的数据在哪里 “应该如何”存储?

    这是我使用ViewModel 的地方。您将Model 映射到ViewModel 并使用ViewModel 来表示要显示的属性。您可以将ViewModel 定制为:

    • 样式/css 属性,
    • 组合属性,
    • 验证逻辑,
    • 更改属性的显示方式等等。

    每个类型/类的位置在哪里?

    src/viewModel

    【讨论】:

    • 模型的类是 Viewmodel 的子类型还是由表示层管理的 Viewmodel 对象容器?
    • 没有子类型。您的模型应该映射到视图模型 1 到 1。它们是表示层对象(“视图”模型):)
    • 它们是模型的容器(或者更确切地说是“装饰器”),还是它们真的存储在从 ModelObject A 到 ViewObject B 的映射中,并且从 B 访问 A 是通过映射反向发生的(例如应用什么意思点击按钮)?
    • @salbeira...就像,什么以及如何显示模型的属性。一个模型到一个视图模型。模型被映射到 viewModel 并且 viewModel 是绑定到你的视图的——而不是模型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    相关资源
    最近更新 更多