2012-04-17 86 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