MST

星途 面试题库

面试题:TypeScript抽象类在复杂架构中的设计优化

在一个大型前端项目中,存在多个模块依赖于一些基础的数据获取和处理逻辑。目前采用抽象类来封装这些通用逻辑,但随着项目规模扩大,发现代码耦合度较高,维护困难。请阐述如何基于现有的抽象类设计进行优化,减少耦合度,提高代码的可维护性和扩展性,给出具体的优化方案和关键代码示例。
38.1万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

优化方案

  1. 依赖注入:通过将基础的数据获取和处理逻辑以依赖的形式注入到各个模块中,而不是模块直接依赖抽象类,这样可以降低模块与具体实现之间的耦合。
  2. 接口隔离:进一步细分抽象类中的方法,形成多个更细粒度的接口,每个模块仅依赖它实际需要的接口,而不是整个抽象类。
  3. 使用工厂模式:利用工厂模式创建基础数据获取和处理逻辑的实例,使得模块无需关心具体的创建过程,进一步降低耦合。

关键代码示例

  1. 接口隔离
    // 定义数据获取接口
    interface DataFetcher {
        fetchData(): Promise<any>;
    }
    
    // 定义数据处理接口
    interface DataProcessor {
        processData(data: any): any;
    }
    
  2. 依赖注入
    class ModuleA {
        private dataFetcher: DataFetcher;
        private dataProcessor: DataProcessor;
    
        constructor(dataFetcher: DataFetcher, dataProcessor: DataProcessor) {
            this.dataFetcher = dataFetcher;
            this.dataProcessor = dataProcessor;
        }
    
        async doWork() {
            const data = await this.dataFetcher.fetchData();
            const processedData = this.dataProcessor.processData(data);
            // 后续处理
        }
    }
    
  3. 工厂模式
    class DataFetcherFactory {
        static createDataFetcher(): DataFetcher {
            // 返回具体的数据获取实现类实例
            return new ConcreteDataFetcher();
        }
    }
    
    class DataProcessorFactory {
        static createDataProcessor(): DataProcessor {
            // 返回具体的数据处理实现类实例
            return new ConcreteDataProcessor();
        }
    }
    
    // 使用工厂创建实例并注入
    const dataFetcher = DataFetcherFactory.createDataFetcher();
    const dataProcessor = DataProcessorFactory.createDataProcessor();
    const moduleA = new ModuleA(dataFetcher, dataProcessor);