如何改进代码并避免重复?

How to improve code and avoid duplications?

我有以下描述模型和发射器的代码:

export class Findbyobjectidlatest {
  onChanged = new EventEmitter<Ifindbyobjectidlatest>();
  model = <Ifindbyobjectidlatest>{ pagesize: 10 };
  emit() {
    this.onChanged.emit(this.model);
  }
}

export class Findbycadnum {
  onChanged = new EventEmitter<Ifindbycadnum>();
  model = <Ifindbycadnum>{ pagesize: 10 };
  emit() {
    this.onChanged.emit(this.model);
  }
}

export class Findbycadastnumber {
  onChanged = new EventEmitter<Ifindbycadastnumber>();
  model = <Ifindbycadastnumber>{ pagesize: 10 };
  emit() {
    this.onChanged.emit(this.model);
  }
}

我该如何改进它,因为 class它们是相似的。

我也有存储库 class:

class RepositoryModel {
   findbyobjectidlatest = new Findbyobjectidlatest();
   findbycadnum = new Findbycadnum();
   findbycadastnumber = new Findbycadastnumber();
}

那我就用它:

const repositoryModel = new RepositoryModel();

repositoryModel.findbyobjectidlatest.onChanged().pipe().subscribe();

等等

您可以使用具有通用类型的基础 class:

class BaseModelEmitter<T extends {pagesize: number}> {
  onChanged = new EventEmitter<T>();
  model = <T>{ pagesize: 10 };
  emit() {
    this.onChanged.emit(this.model);
  }
}

然后让你的 classes 扩展....

export class Findbycadnum extends BaseModelEmitter<Ifindbycadnum> { }

任何 class 用于实现此基础的都必须实现该 pagesize 接口。

或者直接使用它并根据需要跳过扩展(但扩展允许自定义):

findbyobjectidlatest = new BaseModelEmitter<Ifindbycadnum>();