我在辯論自己關於控制我爲應用程序創建的Aggreate View Model類的最佳實踐方法...假設我有一個聚合模型,它具有PurchaseOrder對象和一個行項目列表屬於該採購訂單以及其他一些輔助/相關對象。這個視圖模型只是在處理任何給定的PurchaseOrder時通常需要的所有這些對象的包裝。通過設置屬性或調用方法驅動Aggreagte查看模型?
後創建這個視圖模型的實例後,我則希望它加載了一個採購訂單(它會自動加載PurchaseOrderLineItems和飽和的所有其他相關的對象)...
所以,指示視圖模型加載了一個PurchaseOrder的,是它更容易接受:
指導通過設置在其上的屬性視圖模型(以及通過加載了數據讓視圖模型類響應的屬性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
}
那麼,你當然可以擴展ViewModel類來接受PurchaseOrder並作出適當的反應,但對於這個特定的程序流,我不預先獲取PurchaseOrder對象或以其他方式訪問它來傳遞它... I當我設置一個屬性或調用一個方法時,需要ViewModel爲我處理這個問題。 – MattSlay 2010-03-05 15:07:43
這聽起來像ViewModel依賴於有一個PurchaseOrder,所以創建沒有PurchaseOrder並因此不可用的ViewModel並沒有什麼意義(因爲我假設ViewModel上的所有成員都必須使用PurchaseOrder) 。鑑於你列出的選項,我已經更新了我的答案。 – 2010-03-05 15:15:25
很好。我喜歡你的評論,你「不會認爲設置一個整型屬性最終會在ViewModel上加載所有類型的對象」,但你會希望通過方法調用。這讓我很清楚,方法調用是更合乎邏輯的方式。 – MattSlay 2010-03-05 16:57:33