我創建了一個你正在建議的版本(雖然公認相對不是OOP),它對我來說工作得很好。
我創建了一個MasterController來設置一個數據庫實例和其他一些變量。一旦我開始審視我的CRUD操作中的相似之處,我意識到這可能會被抽象化,並轉化爲主人內部的一種方法。實際上有兩種方法。
protected ActionResult DisplayValidateAndEditModel<TModel>(TModel model, string modelPrefix,
string editViewName, string successActionName, object routeValues, string successMessage,
string[] includeProperties, bool acceptFiles
) where TModel : class
和
protected ActionResult DisplayValidateAndEditModel<TModel>(TModel model, string modelPrefix,
string editViewName, string successActionName, string successMessage,
string[] includeProperties
) where TModel : class
編輯涵蓋創建/讀取/更新和刪除被刪除。列表是一個控制器中的單行 - 我只是得到一組模型並添加到viewdata。
兩種方法都檢查它是否是帖子。如果不是,他們返回視圖。如果是這樣的話:
編輯調用TryUpdateModel,也做一些xVal驗證。如果一切正常,則使用任何routeValues重定向到successAction。如果不是,它再次顯示視圖。可以傳遞includeProperties,以便我的控制器可以精確指定可以獲取更新的內容。 acceptFiles在尋找文件發佈的地方添加了額外的功能,如果存在的話,它將它放入數據庫並在文件記錄和模型之間創建一個鏈接。
刪除更新模型的CANCEL_DATE和Cancel_User屬性(我有一個ICancelable接口)和重定向到成功的行動
我們使用過濾器,豐富的模型和模型活頁夾。這些控制器非常簡單而且很薄,但除了一些細微的差別之外,它們都是一樣的。 – 2009-07-14 17:14:38