【问题标题】:MVC: Controller or Repository with ModelState.Isvalid and DbUpdateConcurrencyExceptionMVC:具有 ModelState.Isvalid 和 DbUpdateConcurrencyException 的控制器或存储库
【发布时间】:2018-10-25 18:24:10
【问题描述】:

ModelState.Isvalid 和 DbUpdateConcurrencyException 应该在 Controller 还是 Repository 中?我创建了一个 MVC 核心项目,在一张桌子上进行脚手架。但是,脚手架不会创建接口或存储库,因此为了正确设计软件,请将插入/更新代码放在存储库中。

只是询问 ModelState.IsValid 和 DbUpdateConcurrencyException 是否也应该放在存储库中?如果放置在存储库中,我会收到编译错误。我是软件设计和 MVC 的新手,还在学习中。

控制器

if (ModelState.IsValid)
{
    try
    {
        _context.Update(ProductTransaction);
        await _context.SaveChangesAsync();
    }
    catch (DbUpdateConcurrencyException)
    {                    
         if (!ProductTransactionExists(ProductTransaction.Id))
         {
             return NotFound();
         }
         else
         {
             throw;
         }

存储库

ProductTransaction.Id= ProductTransactionViewModel.Id;
ProductTransaction.Date= ProductTransactionViewModel.Date
ProductTransaction.CustomerName = ProductTransactionViewModel.CustomerName

【问题讨论】:

  • ModelStateController的一个属性,其值由Controller设置。

标签: asp.net-mvc model-view-controller asp.net-core controller


【解决方案1】:

ModelState.Isvalid 和 DbUpdateConcurrencyException 是否应该在 控制器还是存储库?我创建了一个 MVC 核心项目,进行了 桌子上的脚手架。

ModelState.IsValid 属于表示层,它应该留在那里。如果它的值为true,您应该返回用户在提交之前操作的相同视图。

DbUpdateConcurrencyException 属于存储层,您不能将其传播到表示层。当它发生时,您会捕获该异常。您记录有关它的相关详细信息。之后,您抛出一个自定义异常,例如BusinessException,它只包含用户可以理解的消息,例如“有人已经修改了内容。所以刷新以查看它”。表示层只知道BusinessException 以及如何阅读它的消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 2023-03-20
    相关资源
    最近更新 更多