存储库验证

时间:2012-04-17 16:06:04

标签: asp.net-mvc design-patterns repository-pattern

将mvc与存储库一起使用时,验证模型的最佳方法是什么? 我寻找的例子,但我没有发现任何我需要的东西。

假设我有一个包含5个属性的模型..其中3个带有dataannotations ..我有一些验证,我需要在插入之前检查数据库。

我需要像'User.IsValidToInsert'之类的东西来检查它是否有效。但我也想使用'ModelState.IsValid',因为我不想在'IsValidToInsert'中手动检查所有带有dataannotations的属性。

我该怎么做?我应该设置在'IsValidToInsert'中访问数据库的验证吗?我应该将'User'和'ModelState'作为参数传递给存储库类吗?

1 个答案:

答案 0 :(得分: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");
}