我知道这可能是错误的,但我仍然需要你的帮助。谢谢
请问,关于代码的抽象和实现架构,您能说些什么?
我需要想法。谢谢
export interface IDataService<T> {
getAll(): Promise<DocumentType<T>[]>;
}
export interface IServiceRequestService extends IDataService<IServiceRequest> {
}
export class ServiveRequestService implements IServiceRequestService {
private readonly ServiveRequestModel: DistanceModelType
constructor() {
this.ServiveRequestModel = getModelForClass(ServiveRequest);
}
public getAll(): Promise<DocumentType<IServiceRequest>[] {
return this.ServiveRequestModel.find();
}
}
ServiveRequestService
是class
,这意味着您可以通过调用new
来创建它的许多实例。这些实例之间有什么区别?没有,这表明ServiveRequestService
应该是其他类的实例,而不是它自己的类。
我们可以制作一个泛型类DataService<T>
,它将特定模型作为其构造函数中的参数("依赖注入"(。这消除了对外部getModelForClass
功能的依赖。一般来说,类应该封装自己的逻辑,所以依赖外部方法不是一个好的设计。
export interface IDataService<T> {
getAll(): Promise<DocumentType<T>[]>;
}
export class DataService<T> implements IDataService<T> {
private readonly model: Model<T>;
constructor(model: Model<T>) {
this.model = model;
}
public getAll(): Promise<DocumentType<T>[]> {
return this.model.find();
}
}
const ServiveRequestService = new DataService(ServiveRequestModel);
const all = ServiveRequestService.getAll();
如果ServiveRequestModel
具有正确的类型(Model<IServiceRequest>
(,则将自动推断出通用T
,并且all
将具有类型Promise<DocumentType<IServiceRequest>[]>
。
游乐场链接