【问题标题】:Filter/Sort in the view or in the model?在视图或模型中过滤/排序?
【发布时间】:2010-10-29 18:23:54
【问题描述】:

有一个数据对象列表和一些可视化的东西来表示每个对象,你会在哪里编写排序/过滤逻辑?为什么?

编辑:到目前为止所有的答案都很好,但我忘了添加另一个约束。如果我不想每次都重建视图怎么办?

【问题讨论】:

    标签: sorting filtering mvp


    【解决方案1】:

    答案在于数据。模型提供数据。如果所有数据都在视图中,则过滤和排序可以包含在视图中。如果数据被分块,模型必须传递数据并包含一些过滤/排序(视图可能仍然包含过滤/排序)。

    控制器不应该包含这些功能,因为它是一种路由机制,不应该知道如何解释数据。

    【讨论】:

    • 我喜欢控制器是一种路由机制的描述。
    【解决方案2】:

    取决于排序/过滤操作的复杂性以及视图控件是否本机提供这些服务。如果视图控件提供过滤并且它只是重新格式化内存中的数据,则将其保留在视图中。如果排序/过滤器需要再次访问数据源,则将其全部保存在控制器中。

    【讨论】:

      【解决方案3】:

      我会在控制器中放入排序和过滤方法,并从视图中调用这些方法。

      【讨论】:

        【解决方案4】:

        您的视图应该只处理显示输出。将任何过滤/排序放入您的业务逻辑并将其返回给视图。

        【讨论】:

          【解决方案5】:

          我相信排序应该是分开的。您不应该对模型进行排序,因为您希望保持原样。基本上,模型中的更改意味着视图的重新渲染,而您可能不希望这样做(例如,如果您想要动画过滤器前后状态之间的过渡)。

          我的建议是模型提供数据来创建视图的可视对象列表和排序器对象。排序器对象将输出一个渲染列表,该列表只是一个链接到可视对象的标识符列表(对象列表中的索引或其他)。 ID 出现的顺序代表排序的顺序,任何不在渲染列表中的 ID 都会被隐藏。每次视图接收到渲染列表时,它都会更新它的显示。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多