2011-12-08 35 views
1

在看線上的例子時,我注意到有人用他們的控制器加載他們的模型的一種有趣的方式。加載Controller的構造函數中的所有模型項?

他們通過控制器構造函數加載模型項目:

public class HomeController : Controller { 

     private List<Items> allItems= new List<Items>(); 

     public HomeController() { 
      LoadItems(); 
     } 

     private void LoadItems() { 
      // load all items and cache them 
     } 

這似乎有些奇怪我,因爲我將加載,我需要在基於當我需要他們ActionMethods的項目。因此,ListView或DetailsView或其他什麼都會在需要時查詢數據庫,而不是每次調用HomeController方法時調用「LoadItems」。

只是想知道這是否是一個更好的方法來做到這一點或只是處理MVC的許多方法之一。

+1

個人而言,我不會加載模型,直到調用一個需要該模型的動作,不知道爲什麼您的示例將它們全部加載到構造函數中。 – Maess

+0

Gotcha。這對我來說是有道理的,因爲我至少在推出時會擁有數量有限的「項目」,但這看起來像是浪費資源。 –

回答

2

如果全部操作需要該列表,那麼它是一個簡寫。但我懷疑這是浪費。

你是對的,最好是在每個操作中加載所需的數據。即使只有一個,很少使用的Action也不需要它。
我個人認爲它也更清晰,更易於管理。

2

恐怕答案是你最經常聽到在軟件開發中的一個:

這要看情況。

由於我沒有關於這個例子加載的內容以及它由什麼組成,我不能說在這個特定的例子中這是否有意義。

但基本上我會同意,在大多數情況下,數據應該在需要時加載,而不是在啓動時一次加載。儘可能使用YAGNI(你不會需要它)原則。

0

這似乎是一個非常奇怪的方式來做到這一點。我喜歡你,我喜歡加載我需要的物品,當我需要他們在具體的行動。也許因爲這是一個示例lading構造函數中的所有項目都更容易。但我不會那樣寫產品代碼。

1

即使所有操作都需要模型,您也不想在構造函數中執行此操作。即使沒有動作調用發生,構造函數也會被調用。例如,所有404請求都會調用默認控制器上的構造函數。