2010-03-05 85 views
0

我在辯論自己關於控制我爲應用程序創建的Aggreate View Model類的最佳實踐方法...假設我有一個聚合模型,它具有PurchaseOrder對象和一個行項目列表屬於該採購訂單以及其他一些輔助/相關對象。這個視圖模型只是在處理任何給定的PurchaseOrder時通常需要的所有這些對象的包裝。通過設置屬性或調用方法驅動Aggreagte查看模型?

後創建這個視圖模型的實例後,我則希望它加載了一個採購訂單(它會自動加載PurchaseOrderLineItems和飽和的所有其他相關的對象)...

所以,指示視圖模型加載了一個PurchaseOrder的,是它更容易接受:

  1. 指導通過設置在其上的屬性視圖模型(以及通過加載了數據讓視圖模型類響應的屬性setter)

    ViewModel.PoNo = 1234;

  • 呼叫上視圖模型的方法做的工作:

    ViewModel.LoadPurchaseOrder(1234);

  • 只給幾種關於Aggregate View模型的模式,它基本上是這樣的:

    public class ViewModel 
        { 
         //-- private fields 
         PurchaseOrder _Po = new PurcaseOrder(); 
         List<PurchaseOrderItem> _PoLineItems; 
         Vendor _Vend = new Vendor(); 
         int _PoNo; 
    
         //-- public properties here 
    
         ViewModel(){} // Constructor 
    
        } 
    

    回答

    1

    ViewModel服務於任何目的,除了將所有的PurchaseOrder信息關聯在一起嗎?如果不是,我會說你應該在ViewModel的構造函數中傳遞你的購買訂單,因爲它好像ViewModel只有在PurchaseOrder的狀態下才會處於有效狀態。

    編輯:鑑於你列出的2個選項,我認爲方法調用比設置屬性更有意義,因爲它更容易告訴你正在將PurchaseOrder加載到此ViewModel中。作爲一名開發人員,我不認爲設置整型屬性最終會在ViewModel上加載所有類型的對象,但有人可能期望通過調用一個方法。

    +0

    那麼,你當然可以擴展ViewModel類來接受PurchaseOrder並作出適當的反應,但對於這個特定的程序流,我不預先獲取PurchaseOrder對象或以其他方式訪問它來傳遞它... I當我設置一個屬性或調用一個方法時,需要ViewModel爲我處理這個問題。 – MattSlay 2010-03-05 15:07:43

    +0

    這聽起來像ViewModel依賴於有一個PurchaseOrder,所以創建沒有PurchaseOrder並因此不可用的ViewModel並沒有什麼意義(因爲我假設ViewModel上的所有成員都必須使用PurchaseOrder) 。鑑於你列出的選項,我已經更新了我的答案。 – 2010-03-05 15:15:25

    +0

    很好。我喜歡你的評論,你「不會認爲設置一個整型屬性最終會在ViewModel上加載所有類型的對象」,但你會希望通過方法調用。這讓我很清楚,方法調用是更合乎邏輯的方式。 – MattSlay 2010-03-05 16:57:33