Dependency injection “理解”;依赖注入框架是“细节”;在清洁建筑中

Dependency injection “理解”;依赖注入框架是“细节”;在清洁建筑中,dependency-injection,clean-architecture,Dependency Injection,Clean Architecture,当我读《清洁体系结构》一书时,书中说“架构师的目标是为系统创建一个形状,将策略视为系统最基本的元素,同时使细节与该策略无关。这允许延迟和延迟有关这些细节的决策” 然后它说数据库、依赖注入框架、web服务器等就是这些细节的例子 问题是:只要为数据库创建接口,我就可以开发高级策略,而无需提交数据库等细节。但我不明白的是,如何从高级策略代码中删除“依赖注入框架”,因为像Spring这样的DI框架负责创建和自动连接对象。如果您的DI框架只使用注释或其他机制,需要更改更高的策略才能正常工作,那么,该框架不

当我读《清洁体系结构》一书时,书中说“架构师的目标是为系统创建一个形状,将策略视为系统最基本的元素,同时使细节与该策略无关。这允许延迟和延迟有关这些细节的决策”

然后它说数据库、依赖注入框架、web服务器等就是这些细节的例子


问题是:只要为数据库创建接口,我就可以开发高级策略,而无需提交数据库等细节。但我不明白的是,如何从高级策略代码中删除“依赖注入框架”,因为像Spring这样的DI框架负责创建和自动连接对象。

如果您的DI框架只使用注释或其他机制,需要更改更高的策略才能正常工作,那么,该框架不适合用作干净体系结构中的DI工具,或者不应该严重依赖外部库的任何其他应用程序中的DI工具

但是,例如Spring可以在没有注释的情况下使用

首先,在干净的体系结构中不需要使用DI框架。您可以在最低的“框架和驱动程序”层轻松构建适配器、用例交互器等,并通过构造函数或设置器手动注入它们的依赖关系。没有其他层知道它们的依赖关系是如何注入的


当使用DI框架时,只需要外部解析输入适配器,其他依赖项将由DI框架解析和注入。这意味着您可以在DI框架之间进行更改,甚至可以在不使用任何框架的情况下进行注入,而不会影响最外层的“框架和驱动程序”层。

如果您的DI框架只使用注释或其他需要更改更高策略才能正常工作的机制,那么,该框架不适合用作干净体系结构中的DI工具,或者不应该严重依赖外部库的任何其他应用程序中的DI工具

但是,例如Spring可以在没有注释的情况下使用

首先,在干净的体系结构中不需要使用DI框架。您可以在最低的“框架和驱动程序”层轻松构建适配器、用例交互器等,并通过构造函数或设置器手动注入它们的依赖关系。没有其他层知道它们的依赖关系是如何注入的

当使用DI框架时,只需要外部解析输入适配器,其他依赖项将由DI框架解析和注入。这意味着您可以在DI框架之间进行更改,甚至可以在不使用任何框架的情况下进行注入,而不会影响最外层的“框架和驱动程序”层