让我们想象一下,我想要实现一个基于Uncle Bobs Clean Architecture的ASP.NET应用程序。据我所知:
依赖关系规则表示只允许从外圈到内圈的依赖关系。
据我所知,依赖规则不只是关于控制流,而是关于代码级依赖关系。
但是:为了在“网关”圈中拥有一个Asp.Net控制器,它必须从Asp.Net Controller类派生。
问题:这不会违反依赖规则,因为这会引入从“网关”圈到“框架”圈的编译时依赖性吗?
更新:我在最近的博文https://plainionist.github.io/Implementing-Clean-Architecture-AspNet/
中更详细地讨论了这个问题答案 0 :(得分:4)
是的,这违反了规则。
框架供应商并不关心它,相反,他们努力将我们的应用程序供应商锁定在他们的框架上。
因此我们应该根据项目要求选择我们的技术堆栈,包括框架。如果要求我们快速创建原型,我们需要选择一个帮助我们做RAD的框架。如果要求告诉我们业务概念已经建立且应用程序将存在很长时间,我们需要选择一个框架,允许我们将应用程序与框架和其他工具分离,以便我们可以轻松更新和/或交换工具,包括框架。
例如,Symfony允许我们将控制器耦合或解耦到框架。当谈到ORM时,我们也遇到了这个问题,Propel强迫我们让实体扩展Propel实体,而Doctrine允许我们让实体完全不知道ORM。