Inversion of Control,一种设计思想,不是新的技术,用来减低计算机代码之间的耦合度。
常见的方式叫做依赖注入 Dependency Injection,简称DI
还有一种方式叫“依赖查找” Dependency Lookup
https://www.zhihu.com/question/335362570
https://baike.baidu.com/item/%E6%8E%A7%E5%88%B6%E5%8F%8D%E8%BD%AC/1158025?fr=aladdin
IoC Inverse of Control,控制反转
IoC 指的是将对象的创建权交给 Spring 去创建。
使用 Spring 之前,对象的创建都是由我们使用 new 创建,而使用 Spring 之后,对象的创建都交给了 Spring 框架
AOP Aspect Oriented Programming,面向切面编程为内核
AOP 用来封装多个类的公共行为,将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,减少系统的重复代码,降低模块间的耦合度。另外,AOP 还解决一些系统层面上的问题,比如日志、事务、权限等
装饰器语法
尽可能使用面向对象的思想来编码,使用 class 机制能够方便的融入我们的新特性。
经过装饰器的修饰,形成了多个类,但是又不会相互耦合的局面,让独立开发,测试都非常的方便
IOC案例
代码中展示了两个 class,HomeController 依赖了 ReportService ,
可以看到其中没有任何实例化或者初始化的迹象,
业务代码也如同普通调用的那样直接,这都归功于依赖注入的魔法
@provide()
@controller()
export class HomeController {
@inject()
reportService: IReportService;
@get('/')
async index(ctx) {
ctx.body = await this.reportService.getReport();
}
}
@provide()
class ReportService implements IReportService {
@inject()
reporter: IReportManager;
async getReport(id: number) {
return await this.reporter.get(id);
}
}