2013-05-09 38 views
0

希望我在這裏很清楚。我有一個叫做A的ViewModel。我有一個名爲M的模型。我有一個模型M的存儲庫和它映射到的數據庫的東西叫做RM我的視圖模型是否有我的模型和我的存儲庫實例?

我的ViewModel,A,有我的型號M的屬性,而我的一個用於我的存儲庫RM

我將隨後通過調用RM的各種方法使用它,並結合至其M我會傳遞到某些方法在RMSave()

有意義嗎?這是「正常」還是接近?

回答

1

根據您的喜好,您可能會描述一種典型的情況。如果您的視圖模型希望與實體協同工作,那麼它可以通過一個存儲庫來實現,您可以使用構造函數注入將其作爲依賴項注入,而您的視圖模型可以針對抽象而不是特定的存儲庫實現工作。

如果您希望在構建後的稍後時間訪問存儲庫,則可以將存儲庫分配給私有字段或屬性,例如。

就您的模型而言,您可以擁有一個將其公開給視圖的屬性,以便您不需要在視圖模型上覆制模型的屬性。然而,這將取決於你是否滿意直接訪問你的模型的觀點,這可能違反LoD(Demeter法則)以不違反DRY(不重複自己)原則。

+0

得墨忒耳定律 – 2013-05-09 17:17:16

0

一種方法是從視圖模型中公開類型爲M的屬性,就像您目前所看到的那樣。該視圖將綁定到這個暴露模型的屬性。在你的視圖模型上公開一個名爲Save的方法,你的視圖將在點擊按鈕時調用這個方法(如果你使用WPF,可以使用綁定)。然後,Save方法將創建存儲庫的實例,向其中添加類型M的屬性,然後保存存儲庫。

例子:

public class ViewModel 
{ 
    public void Save() 
    { 
    // Create your repository 
    // Add this.Model to the repository 
    // Save the repository changes 
    } 
    public M Model { get; set; } // Bind your view to this. 
} 

這可以讓你之前和之後執行其他操作的保存,可以使用其他屬性來決定是否和你救什麼,以及如何您的視圖模式「拯救」保持部分的視圖模型,而不是存儲庫。

我還建議尋找使用依賴注入,如@devdigital所述,用於您的存儲庫。這意味着您不必在Save方法中創建存儲庫,而是使用傳遞給視圖模型構造函數的存儲庫實例。

相關問題