asp.net-core - 包含实体框架核心参考的清洁架构 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);
}
}
解决方案
我的理解是,这对于 Clean Architecture 是不正确的。我相信你应该创建一个 custom Exception
,也许在你的Application
层中,然后把它扔到 UI/API 层。如果您在 API 中保持对 EF Core 包的依赖,如果您决定更改持久性机制(例如,不使用实体框架),您还必须使用 1) 更改新的 UI/API 层包参考,以及 2) 一个新的异常类型。
推荐阅读
- json - 嵌套数组,使用 JQ 组合多个过滤器
- javascript - 仅使用密码对用户进行身份验证
- ffmpeg - 音频每隔几秒就断断续续
- php - 使用 Twig 渲染多个页面
- google-apps-script - 如何在 Google Sheets 脚本中为系列中的单个数据点设置颜色
- python - 用逗号格式化一个大整数而不使用 .format()
- ubuntu - start-dfs.sh 抛出端口 22:连接超时错误
- javascript - Bootstrap4 .col 始终占用 100% 并垂直堆叠(引导网格不起作用)
- javascript - 有没有办法使用 vanilla Javascript 或 Jquery 在 DOM 中选择一个 span 类?
- apache-kafka - 是否可以使用 Kafka Connect 将 RDBMS 表镜像到 Kafka 流?