最初に、私はリファクタリングの条件付きロジックを読む方法を探しました - 3つの主なアプローチが提案されているようです:多態性(試したことはありませんが、 )、Enums(使用済み)、The Strategy Pattern(私は数回使用しており、それを好きです。複数の条件付きロジックを実装するための最良のパターン
しかし、私がチェックする程度6-7ブール条件があり、それぞれが偽/真であるかどうかによって、私は別の何かをしたい、すなわち
true, false, false, true
false, false, true, false
true, true, ... you get the picture..
ブール値が異なる好みで設定されている、であることすべてが関係していますが、どちらが真か偽かによって違った扱いをする必要があります。設定の量も同様に増加する可能性があるので、スケーラビリティとメンテナンス可能なものは、私が後にしているものです。
私はここで戦略パターンを使うことができますが、最初に多くの条件付きのチェックがなくても(これは避けようとしています)
例の状況、音楽アプリの周りのプロジェクトセンター、具体的には、トラックが終了したときに何をすべきか、そしてどのようなオプションは、すなわち次に何が起こるかを指示:
SHUFFLE
REPEAT
PLAY_FROM_ALBUM_SONGS
PLAY_FROM_ARTIST
PLAY_FROM_GENRE
PLAY_FROM_ALL_SONGS
だから、基本的な例は、最初と最後の真(すべての曲から&プレイをシャッフル)、残りは偽されているだろう。場合によってはアルバムが再生されている場合にライブラリからすべての曲を再生できないため、いくつかのオプションが選択されると自動的に他の曲に影響します。
複数の条件(6/7 +)に基づくこのような条件付きロジックをどのようにリファクタリングして、醜いコードの巨獣のように見せかけることができないかのご提案です。
"アレンジメント"の意味によって異なります。単純な解決法はブール値を 'int'として再構築し、可能な' int'を特定のアクションにマッチさせることです。 – Paul
キャプチャしたい具体的な配置がありますか?その数はどれくらいですか? –
@Paul私は自分自身を少しはっきりと説明しようとしました。ブール値をint型にすることを意味するとき、それらをint型(1または0)にキャストすることを意味しますか? –