clean-architecture - 整洁架构中从网关到框架的依赖

标签 clean-architecture

假设我想实现一个基于 Uncle Bobs Clean Architecture 的 ASP.NET 应用程序。据我了解:

  • Asp.Net本身就是框架圈
  • Asp.Net Controller 将位于网关/接口(interface)适配器层
  • 我的业务逻辑将在用例/实体层

依赖规则说只允许从外圈到内圈的依赖。

据我了解,依赖规则不仅与控制流有关,而且与一般的代码级依赖有关。

但是:为了在“网关”圈中拥有一个 Asp.Net Controller ,它必须从 Asp.Net Controller 类派生。

问题:这会不会违反依赖规则,因为这会引入从“网关”圈到“框架”圈的编译时依赖?

更新:我在最近的博文 https://plainionist.github.io/Implementing-Clean-Architecture-AspNet/ 中更详细地讨论了这个问题。

最佳答案

是的,它违反了规则。

框架供应商对此并不关心,相反,他们努力让我们的应用程序供应商锁定他们的框架。

因此我们应该根据项目需求来选择我们的技术栈,包括框架。如果是我们快速创建原型(prototype)的需求,我们需要选择一个帮助我们做RAD的框架。如果需求告诉我们,业务概念已经建立,应用会长期存在,那么我们需要选择一个框架,让我们的应用与框架和其他工具解耦,这样我们就可以很容易地更新和/或交换工具,包括框架。

例如,Symfony 允许我们将 Controller 与框架耦合或分离。当谈到 ORM 时,我们也有这个问题,Propel 迫使我们拥有扩展 Propel 实体的实体,而 Doctrine 允许我们拥有完全不知道 ORM 的实体。

关于clean-architecture - 整洁架构中从网关到框架的依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48589192/

相关文章:

java - 在面向服务的体系结构中,映射器调用服务是一种好的做法吗?

android - 整洁架构用例/领域层的相关性

android - Android 的模型层如何使用 SharedPreferences 和 Context?

Flutter BLoC - Bloc vs Cubit 事件驱动状态管理优势

android - Dagger 在单独的 gradle 模块中

flutter/Dart : Subclass a freezed data class

c# - 在 Clean Architecture 中为 Autofac 实现 Serilog 上下文记录器注入(inject)的正确方法是什么?

整洁架构中的 Controller

domain-driven-design - 域实体应该调用存储库吗?