切换主题
字数
465 字
阅读时间
2 分钟
后端系统中,会有很多对象:
- Controller 对象:接收 http 请求,调用 Service,返回响应
- Service 对象:实现业务逻辑
- Repository 对象:实现对数据库的增删改查
此外,还有数据库链接对象 DataSource,配置对象 Config 等等。
这些对象有着错综复杂的关系:
Controller 依赖了 Service 实现业务逻辑,Service 依赖了 Repository 来做增删改查,Repository 依赖 DataSource 来建立连接,DataSource 又需要从 Config 对象拿到用户名密码等信息。
这就导致了创建这些对象是很复杂的,你要理清它们之间的依赖关系,哪个先创建哪个后创建。
比如这样:
javascript
const config = new Config({ username: 'xxx', password: 'xxx'});
const dataSource = new DataSource(config);
const repository = new Repository(dataSource);
const service = new Service(repository);
const controller = new Controller(service);
要经过一系列的初始化之后才可以使用 Controller 对象。
而且像 config、dataSource、repository、service、controller 等这些对象不需要每次都 new 一个新的,一直用一个就可以,也就是保持单例。
在应用初始化的时候,需要理清依赖的先后关系,创建一大堆对象组合起来,还要保证不要多次 new,是不是很麻烦?
没错,这是一个后端系统都有的痛点问题。
解决这个痛点的方式就是 IoC(Inverse of Control)。
java 的 Spring 就实现了 IoC,Nest 也同样实现了。
那什么是 IoC 呢?
之前我们手动创建和组装对象不是很麻烦么,我能不能在 class 上声明依赖了啥,然后让工具去分析我声明的依赖关系,根据先后顺序自动把对象创建好了并组装起来呢?
贡献者
sunchengzhi