同じような if 文が複数箇所に現れる場合、Strategyパターンを検討しよう。
2867 ワード
const func = (type) => {
if (type == 'foo') {
// ...
} else { // type == 'bar'
// ...
}
// ...
// ...
if (type == 'foo') {
// ...
} else {
// ...
}
// ...
// ...
}
このように type
とか hoge_flg
みたいなものによって処理の 一部 が変わるような場合、その部分の処理は実はその type
そのものに帰属する、と考えるとうまくいくことがある。
以下では type
の代わりに strategy
というオブジェクトを用意し、type
ごとに異なる strategy
を渡すことで処理の違いを表現している。
const func = (strategy) => {
strategy.f()
// ...
// ...
strategy.g()
}
適用前では下記のようなデメリットがあったのが、適用後で払拭されるだけでなく、新たなメリットも生んでいる。
- 適用前
- 新しいタイプ
'baz'
が出来た時複数箇所を修正する必要がある - 一つの関数内に、
type
ごとに異なる処理が一緒くたにされておりテストしづらい
- 新しいタイプ
- 適用後
- テスト対象が
foo_strategy
,bar_strategy
, 及びfunc
に分離できる -
func
のテストにはmock_strategy
を渡すことで処理を模倣することができる - 新しい
baz_strategy
が増えても既存のコードの変更は不要
- テスト対象が
Author And Source
この問題について(同じような if 文が複数箇所に現れる場合、Strategyパターンを検討しよう。), 我々は、より多くの情報をここで見つけました https://qiita.com/amoO_O/items/9f7594513e2915eaf502著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .