TS类内部调用其它类的方法

4 阅读1分钟

内部创建实例

通常TS某个类需要调用其它类的非静态方法,需要持有该类的实例引用,并且需要在内部创建类的实例。

class A {
    method_1(){
        // ...
    }
}
class B {
    // 持有A类的实例引用
    private a: A
    constructor(){
        this.a = new A(); // 实例化
    }
    callAMethod_1() {
        this.a.method_1();
    }
}

但是这样耦合性较高,比如我想调用A的子类方法或者我想换成测试的MOCK实例,那么可能修改类B的代码.

依赖注入

另一种方式是我们可以采用依赖注入的方式。

核心是类内部不创建其它类的实例,而将类的实例传入。

class A {
    method_2(){
        // ...
    }
}
class B {
    private a: A
    // 构造函数传入实例
    constructor(a:A){
        this.a = a;
    }
}

内部创建实例和依赖注入适用场景对比

方法适用场景核心特点
类内创建实例1.依赖类简单、无复杂配置;2.依赖不会变化(无子类替换需求);3.仅当前类使用该依赖写法简单,耦合度搞,适用简单场景
依赖注入1.依赖复杂(需配置参数)、可能有子类;2.需要单元测试(可以注入MOCK实例);3.依赖被多个类共享耦合度低,灵活性可扩展,适合实例项目开发