You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular Typescript项目中重复代码的重构方案咨询

代码优化方案

核心思路

  • 抽离重复的请求调用、默认参数处理、返回值映射逻辑为独立的公共方法,原有业务方法直接复用该方法即可,消除重复代码的同时提升可维护性,后续如果要修改请求逻辑只需要调整一处。
  • 支持可选的自定义参数扩展,适配后续可能出现的非默认分页、额外查询条件的需求。

优化后代码示例

// 抽离的公共请求方法,可被所有需要调用该搜索接口的业务方法复用
private fetchStockSearchData(id: string, searchMeta = this.service.getSearchMetaDefaults()): Observable<{
  searchResult: IStockResult[];
  searchCount: number;
}> {
  return this.service
    .search(id, searchMeta)
    .pipe(
      map(response => ({
        searchResult: response, 
        searchCount: response.meta.totalResourceCount
      }))
    );
}

// 原有业务方法直接复用公共方法即可,无需重复写请求逻辑
getStockData(id: string): Observable<{
  searchResult: IStockResult[];
  searchCount: number;
}> {
  return this.fetchStockSearchData(id);
}

// 另一个之前重复的分页业务方法,有自定义参数的话也可以直接传入
getStockDataWithPagination(id: string, page: number, pageSize: number): Observable<{
  searchResult: IStockResult[];
  searchCount: number;
}> {
  const customMeta = {
    ...this.service.getSearchMetaDefaults(),
    page,
    pageSize
  };
  return this.fetchStockSearchData(id, customMeta);
}

可选额外优化点

  • 如果返回值的类型{searchResult: IStockResult[]; searchCount: number}多处使用,可以单独抽成自定义类型type StockSearchResponse或者接口,减少重复的类型定义代码。
  • 如果后续需要给该搜索接口加通用的异常处理、缓存逻辑,也可以直接加在抽离的fetchStockSearchData方法中,所有调用方自动生效。

内容的提问来源于stack exchange,提问作者user15878006

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:57:04