清洁架构 UI 层包含 Entity Framework 核心参考
Clean Architecture UI layer containing Entity Framework Core Reference
我正在开发一个 .Net 5 项目,我使用了 Clean Architecture pattern 。当我处理并发时,我需要添加对 Web 项目的 EFCore 引用,如下所示。将 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);
}
}
我的理解是,这对于清洁架构来说是不正确的。我相信您应该创建一个自定义 Exception
,也许在您的 Application
层中,然后将其扔到 UI/API 层。如果您在 API 中保持对 EF Core 包的依赖,一旦您决定更改持久性机制(例如不使用 Entity Framework),您还必须更改 UI/API 层,其中 1) 一个新的包引用,以及 2) 一个新的异常类型。
我正在开发一个 .Net 5 项目,我使用了 Clean Architecture pattern 。当我处理并发时,我需要添加对 Web 项目的 EFCore 引用,如下所示。将 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);
}
}
我的理解是,这对于清洁架构来说是不正确的。我相信您应该创建一个自定义 Exception
,也许在您的 Application
层中,然后将其扔到 UI/API 层。如果您在 API 中保持对 EF Core 包的依赖,一旦您决定更改持久性机制(例如不使用 Entity Framework),您还必须更改 UI/API 层,其中 1) 一个新的包引用,以及 2) 一个新的异常类型。