依赖倒转原则 (DIP-Dependency Inversion Principle):高层模块不应依赖于低层模块,二者都应依赖于抽象;而且抽象不应依赖于细节,细节应依赖于抽象。
class A {
name: string
constructor(name: string) {
this.name = name
}
}
class B {
age:number
entity:A
constructor (age:number) {
this.age = age;
this.entity = new A('Snow')
}
}
const c = new B(18)
c.entity.name
复制代码
B 中代码的实现是需要依赖 A 的,两者的代码耦合度非常高。当两者之间的业务逻辑复杂程度增加的情况下,维护成本与代码可读性都会随着增加,并且很难再多引入额外的模块进行功能拓展。
class A {
name: string
constructor(name: string) {
this.name = name
}
}
class C {
name: string
constructor(name: string) {
this.name = name
}
}
// 调度器,类似发布订阅
class Container {
modeuls: any
constructor() {
this.modeuls = {}
}
provide(key: string, modeuls: any) {
this.modeuls[key] = modeuls
}
get(key) {
return this.modeuls[key]
}
}
const mo = new Container()
mo.provide('a', new A('snow one'))
mo.provide('c', new C('snow two'))
class B {
a: any
c: any
constructor(container: Container) {
this.a = container.get('a')
this.c = container.get('c')
}
}
new B(mo)
复制代码
其实就是写了一个中间件,来收集依赖,主要是为了解耦,减少维护成本
评论