依赖倒转原则 (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)
复制代码
其实就是写了一个中间件,来收集依赖,主要是为了解耦,减少维护成本
评论