2012-04-17 80 views
2

在使用mvc與存儲庫時驗證模型的最佳方法是什麼? 我尋找的例子,但我沒有找到任何正是我所需要的。存儲庫驗證

假設我有一個具有5個屬性的模型..其中3個具有dataannotations ..我有一些驗證,我需要在插入前檢查數據庫。

我需要'User.IsValidToInsert'來檢查它是否有效。但我也想使用'ModelState.IsValid',因爲我不想手動檢查'IsValidToInsert'中的所有帶有數據註解的屬性。

我該怎麼做?我應該在「IsValidToInsert」中設置訪問數據庫的驗證嗎?我是否應該將'User'和'ModelState'參數傳遞給存儲庫類?

回答

0

您應該使用特定於視圖的視圖模型。如果您有Create操作來創建Product,請創建一個ProductCreate視圖模型。您可以將特定於創建產品的數據註釋(或Fluent驗證等)。這將是您的視圖/控制器的模型。如果您有編輯頁面,則創建一個ProductEdit視圖模型。

現在,如果您有其他邏輯(例如驗證用戶是否已經存在,那麼您應該將它放在服務層中,您的控制器應該儘可能簡單,您可以發佈視圖模型,將其轉換爲域模型並在必要時將它傳遞給業務層。

[HttpPost] 
public ActionResult Create(ProductCreate model) 
{ 
    // simple validations 
    if(!ModelState.IsValid) 
    { 
     return View(model); 
    } 

    // Domain Model/Entity 
    Product product = // create a product from your model here 

    // service layer 
    ProductService.Add(product); 

    return RedirectToAction("Index"); 
} 
+0

因此,ProductService類訪問的倉儲類和我永遠不會使用存儲庫直接? – MuriloKunze 2012-04-17 17:03:48

+0

@murilokunze你可以這樣做的。如果你不這樣做有很多業務邏輯,你可以把它放在你的倉庫中,直接引用它,這取決於情況。 – Dismissile 2012-04-18 13:40:49

相關問題