在视图或模型中过滤/排序?

时间:2009-05-29 01:06:42

标签: sorting filtering mvp

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

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

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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