首页 > 解决方案 > 包含实体框架核心参考的清洁架构 UI 层

问题描述

我正在开发一个使用 Clean Architecture 模式的 .Net 5 项目。当我处理并发时,我需要添加对 Web 项目的 EFCore 引用,如下所示。在 Clean Architecture 模式中将 EFCore 引用添加到 Web 项目是否正确。DbUpdateConcurrencyException 需要 EFCore 参考。

 public async Task<IActionResult> EditSubmit(EditProductViewModel editProductViewModel)
    {
        try
        {
            if (!ModelState.IsValid)
            {
                return View("../Product/Edit", editProductViewModel);
            }

            await _productService.UpdateProduct(editProductViewModel);
            ModelState.Clear();
            return View("../Product/Edit", new EditProductViewModel());
        }
        catch (DbUpdateConcurrencyException ex)
        {
            string message = "Product has been changed by another user please go to Product List";
            _log.LogError(message + ":" + ex.ToString());
            return View("../Product/Edit", editProductViewModel);
        }
        catch (Exception ex)
        {
            string message = "Product update failed";
            _log.LogError(message + ":" + ex.ToString());
            return View("../Product/Edit", editProductViewModel);
        }

    }

标签: asp.net-core.net-core.net-5clean-architecture

解决方案


我的理解是,这对于 Clean Architecture 是不正确的。我相信你应该创建一个 custom Exception,也许在你的Application层中,然后把它扔到 UI/API 层。如果您在 API 中保持对 EF Core 包的依赖,如果您决定更改持久性机制(例如,不使用实体框架),您还必须使用 1) 更改新的 UI/API 层包参考,以及 2) 一个新的异常类型。


推荐阅读