1

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

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

4

5 回答 5

2

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

于 2009-05-29T01:10:54.497 回答
2

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

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

于 2009-05-29T01:31:35.563 回答
0

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

于 2009-05-29T01:09:49.553 回答
0

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

于 2009-05-29T01:09:56.433 回答
0

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

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

于 2009-05-29T02:22:16.833 回答