主要观点:作者最初构建 Python 项目时只关注功能实现,后来发现代码存在问题,如耦合度高、测试困难等,在资深开发者介绍下了解到依赖注入(Dependency Injection,DI),并介绍了 DI 的概念、工作方式、在 Python 中的应用及使用 dependency-injector 库的示例,强调 DI 可改善代码结构、便于测试等,最后呼吁读者尝试使用 DI 来写出更优质的 Python 代码。
关键信息:
- DI 是“给我所需,不要让我自己创建”,可实现依赖外部注入,便于替换和促进松耦合。
- 无 DI 时代码耦合度高,如 DataProcessor 类直接创建数据库连接,切换数据库或测试困难。
- 有 DI 时,将依赖作为参数传递给类,如 DataProcessor 类接收外部传入的数据库。
- dependency-injector 库提供容器(Container)和提供者(Provider)来管理依赖,有 Factory、Singleton 等类型。
- 示例中通过 Container 配置和管理各种依赖,如数据库和服务,在 ETL 管道中使用 DI 实现各组件的协作。
重要细节:
- 安装 dependency-injector 库的命令为
pip install dependency-injector
。 - 容器像依赖的注册表,知道如何创建组件和组件所需的依赖。
- 提供者用于告诉容器如何创建对象,如 Factory 每次创建新实例,Singleton 只创建一个实例。
- 在使用容器时,先加载配置文件,然后创建带有自动解析依赖的对象,如
pipeline = container.etl_pipeline()
。 - 在 ETLPipeline 类中,通过构造函数接收依赖,并在 run 方法中使用这些依赖进行数据处理。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。