清洁体系结构中从网关到框架的依赖性

时间:2018-02-02 18:56:02

标签: clean-architecture

让我们想象一下,我想要实现一个基于Uncle Bobs Clean Architecture的ASP.NET应用程序。据我所知:

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

依赖关系规则表示只允许从外圈到内圈的依赖关系。

据我所知,依赖规则不只是关于控制流,而是关于代码级依赖关系。

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

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

更新:我在最近的博文https://plainionist.github.io/Implementing-Clean-Architecture-AspNet/

中更详细地讨论了这个问题

1 个答案:

答案 0 :(得分:4)

是的,这违反了规则。

框架供应商并不关心它,相反,他们努力将我们的应用程序供应商锁定在他们的框架上。

因此我们应该根据项目要求选择我们的技术堆栈,包括框架。如果要求我们快速创建原型,我们需要选择一个帮助我们做RAD的框架。如果要求告诉我们业务概念已经建立且应用程序将存在很长时间,我们需要选择一个框架,允许我们将应用程序与框架和其他工具分离,以便我们可以轻松更新和/或交换工具,包括框架。

例如,Symfony允许我们将控制器耦合或解耦到框架。当谈到ORM时,我们也遇到了这个问题,Propel强迫我们让实体扩展Propel实体,而Doctrine允许我们让实体完全不知道ORM。