这是关于干净的建筑。如下图所示,实心箭头表示编译时依赖项,虚线箭头表示仅运行时依赖项。
其思想是,核心层拥有接口和业务逻辑。下层是持久层的实现。UI层是MVC web层。
下层和UI层都引用核心层。这会导致编译时依赖关系。运行时依赖关系作为DI框架的一部分发生.图2清楚地表示了这一点。
图1略有不同,显示了从UI层到Infra层的编译时间依赖性(这在图2中没有显示)。在清洁架构的中,从UI层到Infra层的编译时间依赖是什么意思?
图1:

图2:

发布于 2021-07-06 02:26:36
有编译时依赖性意味着什么?
这意味着依赖关系在编译时存在。因此,如果没有依赖项,则无法编译。
这也意味着代码的一个部分和另一个部分之间有很强的联系。这可能是可以的,但在某些情况下,您可能想要避免这种情况。
更有可能的是,依赖项中的设计决策可能会进入不应该出现的代码中,例如影响UI的基础设施。
典型的例子是数据库技术和数据访问代码。假设您开发了应用程序的UI和业务逻辑,但是您希望实现两个不同的数据库-- MS和Oracle。您可以将必要的数据访问代码开发成两个不同的程序集/模块--每个程序集/模块一个,但由于编译时的依赖性,您必须同时使用它们,生成的结果将包括Oracle和MS系统依赖项。
如果使用DI,则依赖关系只在运行时生效,因此您的构建将更加干净。
这还意味着,在UI中使用Oracle或MS特定代码的可能性要小得多。
https://stackoverflow.com/questions/68253822
复制相似问题