2012-05-02 42 views
0

在乾淨的MVC中,我將從數據庫中收集數據並將其傳遞給要呈現的視圖。MVC - 視圖中的數據源容器

即使視圖邏輯選擇不呈現某些元素。這提出了以下問題:

乾淨準備一個包含所有數據庫查詢的容器,但只從視圖中獲取數據,如果視圖開始迭代此容器(它是可迭代的),而不是獲取數據「在控制器」?

附錄

我穿越到視圖的容器是「」的典範,讓我們把它ExpensiveObjectProvider。當這個容器傳遞給視圖時,數據尚未從數據庫中獲取。

容器封裝的對象可能很昂貴。我在控制器中看到的唯一原因是錯誤處理(如果數據庫查詢出錯,連接問題等)。你認爲從控制器的數據庫中預取第一個1-2-3對象,然後將容器傳遞給視圖(如果沒有異常發生)並讓視圖使用預取的數據並在迭代容器時獲取新項目?

回答

0

通常,數據庫代碼不會進入視圖,它將位於模型或模型所依賴的DAO中。視圖中的邏輯將很難測試,並且如果數據庫訪問代碼也是非常麻煩的。

+0

是的,我傳遞給視圖的容器是一種模型。當這個容器傳遞給視圖時,數據尚未從數據庫中獲取。 – Flavius

+0

好吧,我現在明白了。如果數據庫代碼被封裝在模型中,那麼在視圖需要時它是乾淨的。 –

+0

由容器封裝的對象可能很昂貴。我在控制器中看到的唯一原因是錯誤處理(如果數據庫查詢出錯,連接問題等)。你認爲從控制器的數據庫中預取第一個1-2-3對象,然後將容器傳遞給視圖(如果沒有異常發生)並讓視圖使用預取的數據並在迭代容器時獲取新項目? – Flavius

0

視圖不應該執行任何這樣的邏輯。控制器告訴視圖要顯示的數據。控制器從模型中獲取這些數據。