Python微信订餐小程序课程视频
https://blog.csdn.net/m0_56069948/article/details/122285951
Python实战量化交易理财系统
https://blog.csdn.net/m0_56069948/article/details/122285941
google 出品的依赖注入库 wire:https://github.com/google/wire
什么是依赖注入
依赖注入 ,英文全名是 dependency injection,简写为 DI。
百科解释:
依赖注入是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。
在用编程语言编写程序时,比如用 java 语言,会编写很多类,这些类之间相互调用,完成一个具体的功能。
例如,从 MySQL 获取数据,那么需要一个 MySQL 操作类 。
第一次编写mysql操作类:
Copyclass MySQL{
}
要从 mysql 获取数据,那么 mysql 数据库的用户名,密码,地址等等这些配置信息,也是需要的,继续编写 MySQL 类:
Copypackage com.demo.mysql
class MySQL {
getMySQLConfig() {
port = 3306;
username = "xxx";
password = "xxx";
}
initMySQL(){}
querySQL(){}
}
进一步思考,上面的 MySQL 操作类程序有什么不妥的地方?
编程原则里有一个原则就是:单一职责
也就是说一个类最好只干一件事情。
根据这个原则在看看 MySQL 类,里面有获取数据库配置数据,也有操作MySQL的方法,不是单一职责的。
那里面获取数据库配置数据,可不可以单独拎出来用一个类表示? 当然可以。
因为 MySQL 配置数据,多数是从文件里读取的,上面 MySQL 类是写死,这也是不合理的一个地方。
而配置文件的来源,可以是 yml 格式文件,也可以是 toml 格式文件,还可以是远程文件。
第二次编写mysql操作类:
修改上面的类,增加一个获取数据库配置的类:
Copypackage com.demo.mysql
class MySQLConfig {
getMySQLConfig() {
// 从配置文件获取 mysql 配置数据
}
}
获取数据的类变成:
Copypackage com.demo.mysql
class MySQL {
initMySQL(){
// 获取数据库的配置信息
mysqlconfig = new MySQLConfig();
}
querySQL(){}
}
思考一下,上面改写后的类有什么不妥的地方?
获取mysql的配置信息,是不是要在 MySQL 类里 new一下, 实例化一下,如果不在同一个包下,还要把配置类引入进来在才能实例化。这里能不能优化下,当然可以。
直接把数据库配置类注入到 MySQL 操作类里。这就是依赖注入。
- 依赖是什么?注入又是什么?
mysql 操作类依赖谁?依赖数据库配置类。
注入什么?把数据库配置类注入到 mysql 操作类里。
注入是一个动作,把一个类注入到另外一个类。
依赖是一种关系,类关系,一个类要完全发挥作用,需要依赖另外一个类。
要完成数据操作,mysql操作类是需要依赖数据库配置类的,把数据库配置类注入到mysql操作类里,就可以完成操作类功能。
第三次编写mysql操作类:
伪代码示例:
Copypackage com.demo.mysql
class MySQL {
private MySQLC