0
私は、要求 - 応答フローを実装する以下のタイプコードを持っています。以下のタイスクリプトコードをどのようにして実装できますか?
DataRequest - FooDataRequest & BarDataRequestの2つのタイプがあります。
これらの要求タイプには複数のリゾルバがあります。 FooResolverはFooの特定の事柄を行い、バー特定の事柄を行いFooDataResponseとBarResolverを送り返しや送り返すBarDataResponse
abstract class DataRequest{
public type: typeof DataRequest;
public payload: string;
}
abstract class DataResponse {
public data: any;
}
class FooDataRequest extends DataRequest {
constructor() {
super();
this.type = FooDataRequest;
this.payload = "foo request";
}
}
class BarDataRequest extends DataRequest {
constructor() {
super();
this.type = FooDataRequest;
this.payload = "foo request";
}
}
class FooDataResponse extends DataResponse {
constructor() {
super();
this.data = "foo response";
}
}
class BarDataResponse extends DataResponse {
constructor() {
super();
this.data = "bar response";
}
}
abstract class DataResolver {
abstract resolve(request:DataRequest): DataResponse
}
class FooViewResolver extends DataResolver {
public resolve(reportRequest:FooDataRequest): FooDataResponse {
return new FooDataResponse();
}
}
class BarViewResolver extends DataResolver {
public resolve(dashboardRequest:BarDataRequest): BarDataResponse {
return new BarDataResponse();
}
}
class ResolverFactory {
public static getResolver(request: DataRequest): DataResolver {
//If there is 100 request , then so many if else statement
//That is not effective
if (request.type === FooDataRequest) {
return new FooViewResolver();
}
else if (request.type = BarDataRequest) {
return new BarViewResolver();
}
}
}
const request :DataRequest = new FooDataRequest();
const resolver: DataResolver = ResolverFactory.getResolver(request);
console.log(resolver);
const response: DataResponse = resolver.resolve(request);
console.log(response);
リゾルバの工場を実施するための最良の方法は何ですか?私は100の要求の種類があれば、適切なリゾルバを識別するために複数のif文を持つでしょう。 またはこの問題を設計するより良い方法はありますか? @plalxコメントに続いて
SOそれがコードレビューのウェブサイトではありません。 :)それのための他のフォーラムがあります。 :) – toskv
リゾルバを工場に登録するだけで、内部マップを使用してリゾルバとリクエストタイプをリンクすることができます。 – plalx