【问题标题】:should UI state be stored in model or controller?UI 状态应该存储在模型还是控制器中?
【发布时间】:2014-09-04 23:29:22
【问题描述】:

让我们举个简单的例子:

data --> projection --> view

我在这里所说的投影可以是导致过滤、排序、突出显示等的任何 UI 状态...

在 MVC 范式中,数据存在于模型中,视图是视图,状态属于哪里?

我曾经将状态存储在控制器中,但我听说这很糟糕,控制器应该保持“精简”并且所有内容都应该填充到模型中。我可以看到使用无状态控制器进行测试的优势,但将数据及其在模型中的投影耦合起来似乎违反直觉。

如果不同的视图需要不同的数据投影怎么办?它是如何分解的?

[编辑] 找到了一些相关的问题herehere,但他们没有直接回答问题。我知道将 logic 用于在模型中投影数据,但它没有说明这些投影的 state 应该保持在哪里。

【问题讨论】:

    标签: javascript model-view-controller architecture


    【解决方案1】:

    您所说的“投影”是两件事之一。要么是实际的模型数据,此时它属于模型层,要么是MVVM 中的 ViewModel。因此,它位于视图和控制器之间的自己的层中。

    我真的需要查看更多详细信息,以了解其中哪些更能代表您要完成的工作。例如,如果这是存储复选框的状态和文本字段,那么它就是 MVVM。如果您正在记录“选择”的实体列表,那么它可能属于域层。

    如果它是自己的模型,它可能与原始模型不同。它可以完全独立,但仍取决于其他模型。

    【讨论】:

    • 我在数据可视化环境中工作,投影是模型的处理版本,我猜是一种缓存。 ViewModel 似乎很适合这里。是否必须有一个,或者视图可以直接在 MVVM 中访问模型?
    • 当你说“已处理”时,它让我觉得它仍然是一个模型,只是该模型的不同表示,因此应该仍然存在于模型层中。如果您还没有将其“处理”成专门为您的特定视图量身定制的对象,那么它只是一个简单的模型,这使得决策变得容易。
    • 不要将缓存与不同的表示混为一谈。如果您希望对象在会话中存在,那么它不是缓存。
    • 这确实是我最终所做的:我将模型分解为子模型,并且效果很好。你想更新你的答案以便我接受吗?
    猜你喜欢
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    相关资源
    最近更新 更多