2011-10-06 69 views
1

我有一個實體的創建頁面和編輯頁面。這些頁面是相似的,所以我有一個基本視圖模型,它包含頁面之間的公共字段,以及從基本繼承的每個頁面的視圖模型。查看模型設計

這兩個頁面之間的差異之一是創建頁面具有搜索表單,用戶可以在其中輸入條件並使用ajax查詢進行搜索。搜索條件字段不是實體的一部分。我創建了一個「SearchCriteria」子模型,它具有自己的屬性以適應不同的搜索條件,這樣我就可以在執行搜索時簡單地發佈這個模型,並且可能在未來添加更多的搜索條件,而無需修改方法參數。

事實證明,我確實需要添加其他東西,但其他東西是基本視圖模型的屬性之一。我不確定這是什麼最好的方式。我在想,我將不得不考慮該屬性不再普遍,並將其移入我的編輯視圖模型和我的SearchCriteria模型中,但隨後我失去了對該實體的通用映射,並且必須重複代碼。

我想我可能在某個地方出了問題,所以一些設計建議將不勝感激。

謝謝

回答

1

我也遇到過類似的問題。首先,具有搜索功能。您可以創建一個SearchServiceController。然後,添加一個局部視圖並在想要顯示搜索欄時傳遞一個模型,否則傳遞null並不顯示任何內容。通過這種方式,您可以將搜索功能保留在其自己的流程中,從而分離關注點

至於添加一個不會使用的屬性,我不認爲這會帶來很大的問題。 .NET框架充滿了不實現基本部分的子類。相反,你可以拋出一個NotImplementedException。對我來說,它非常值得爲了獲得一致性和乾爽而進行的交易。我個人發現,在控制器之間共享viewmodels並不是一件好事(但在這種情況下,您可能會使用單個控制器)。與Ninject一起使用IoC時,當我的接口綁定到跨控制器的相同視圖模型時,我得到了大量循環冗餘錯誤。出於這個原因,我拿出Ninject。但是,也許你可以綁定在另一層......沒有嘗試過。