-1
私は戦略的なデザインパターンを実装しようとしています。if-elseラダーを無視して戦略的なデザインパターンを実装する
は私が持っているシンプルなのif-else以下のようにはしご:
if(dataKeyinresponse === 'year') {
bsd = new Date(moment(new Date(item['key'])).startOf('year').format('YYYY-MM-DD'))
nestedbed = new Date(moment(new Date(item['key'])).endOf('year').format('YYYY-MM-DD'));
} else if(dataKeyinresponse === 'quarter') {
let tempDate = new Date(moment(new Date(item['key'])).add(2, 'months').format('YYYY-MM-DD'));
// nestedbed = new Date(moment(new Date(item['key'])).add(3, 'months').format('YYYY-MM-DD'));
nestedbed = new Date(moment(tempDate).endOf('month').format('YYYY-MM-DD'));
} else if(dataKeyinresponse === 'month') {
nestedbed = new Date(moment(new Date(item['key'])).endOf('month').format('YYYY-MM-DD'));
} else if(dataKeyinresponse === 'week') {
//Relying more on the ES start date for week
nestedbed = new Date(moment(new Date(item['key'])).weekday(7).format('YYYY-MM-DD'));
} else {
// bed = bucketStartDate;
nestedbed = new Date(item['key']);
}
と私はそれに戦略的なパターンを実装:私は条件に基づいて特定のクラスを呼び出す方法として混乱しています
interface emptyBucketInterface {
fnGetEmptyBuckets();
}
class year implements emptyBucketInterface {
fnGetEmptyBuckets() {
bsd = new Date(moment(new Date(item['key'])).startOf('year').format('YYYY-MM-DD'))
nestedbed = new Date(moment(new Date(item['key'])).endOf('year').format('YYYY-MM-DD'));
return {
"bsd": bsd,
"nestedbed": nestedbed
};
}
}
class quarter implements emptyBucketInterface {
fnGetEmptyBuckets() {
let tempDate = new Date(moment(new Date(item['key'])).add(2, 'months').format('YYYY-MM-DD'));
nestedbed = new Date(moment(tempDate).endOf('month').format('YYYY-MM-DD'));
return {
"tempDate": tempDate,
"nestedbed": nestedbed
};
}
}
class month implements emptyBucketInterface {
fnGetEmptyBuckets() {
nestedbed = new Date(moment(new Date(item['key'])).endOf('month').format('YYYY-MM-DD'));
return {
"nestedbed": nestedbed
};
}
}
class week implements emptyBucketInterface {
fnGetEmptyBuckets() {
nestedbed = new Date(moment(new Date(item['key'])).weekday(7).format('YYYY-MM-DD'));
return {
"nestedbed": nestedbed
};
}
}
が、
if-elseラダーと同様に、dataKeyinresponse
の値を確認してから、いくつかのステートメントを実行します。
しかし、ここで戦略パターンでどのように条件を見て、そのクラスを実行します。
助けていただければ幸いです。
であなたのクラスに名前を付ける必要がありますが、あなたが返すオブジェクトは、あなたのIF-に関してanytting作成されますが、実際には変更されていない方法を変更しているように思えますそれ以外ははしご。 switch文、または '年'、 '四半期'、 '月'という名前の関数を持つオブジェクトのほうがよいかもしれません.... – user3094755
... 'actions [datakeyinresponse]()'? – jdphenix
@Scary Wombat そのコードはタイスクリプトで書かれています –