2009-05-29 53 views
1

有一個數據對象的列表和一些可視化代表每個對象的代碼,你會在哪裏編碼排序/過濾邏輯?爲什麼?過濾/排序在視圖中還是在模型中?

編輯:到目前爲止所有答案都很好,但我忘了添加另一個約束。如果我不想每次重建視圖會怎麼樣?

回答

2

答案在於數據。該模型提供數據。如果所有數據都在視圖中,則過濾和排序可以包含在視圖中。如果數據被分塊,模型必須傳遞數據幷包含一些過濾/排序(視圖可能仍然包含過濾/排序)。

控制器不應該包含這些功能,因爲它是一種路由機制,不應該有如何解釋數據的任何想法。

+0

我喜歡作爲路由機制的控制器的描述。 – 2010-07-27 07:38:47

0

我會放在控制器中的排序和過濾方法,並從視圖中調用這些方法。

0

您的視圖應該只處理顯示輸出。將任何過濾/排序放入您的業務邏輯並將其返回到視圖。

2

取決於排序/過濾器操作的複雜性以及視圖控件是否原生提供這些服務。如果視圖控件提供了過濾功能,並且它只是簡單地重新格式化內存中的數據,然後將其保留在視圖中。如果排序/過濾器需要再次訪問數據源,則將其全部保存在控制器中。

0

我認爲排序應該是單獨的東西。你不應該在模型中排序,因爲你想保持原樣。基本上,模型中的變化意味着重新渲染視圖,並且您可能不希望這樣做(例如,如果要爲前和後濾鏡狀態之間的轉換創建動畫效果)。

我的建議是,該模型提供的數據同時創建的視圖和一個排序對象可視對象的列表。分揀機對象將輸出一個渲染列表,該列表將僅僅是鏈接到可視對象的一些標識符的列表(對象列表或其他列表中的索引)。 ID出現的順序表示排序的順序,並且隱藏了不在渲染列表中的任何ID。每當視圖收到一個渲染列表時,它就會更新它的顯示。