私はいくつかのコード (Java) を見直し、ビジネス ロジック フロー チャートに基づいて変更を加えています。現在のコードは、大量の if ステートメントに依存しています。これを避けたいと考えています。私はポリモーフィズムについて読んでいて、それを自分の状況に適用する方法に頭を悩ませようとしています。単一レベルの条件付きで機能させることはできますが、複数の条件付きレベルにさらに拡張するのに苦労しています。コードは実行時に実行され、この「ロジック」メソッドには前のステップから変数が渡されます。
不自然な例: 2 つの動物園、「動物園 A」と「動物園 B」、および「ホーム」があります。これらのそれぞれが「場所」です。各動物園には、「北」、「南」、「東」、「西」の 4 つの「場所」があります。「ホーム」には 1 つの場所しかありません。いくつかの変数に基づいて、どこに行くべきかについて「目的地」を人に割り当てたいと考えています。これらの変数は次のとおりです。「場所」は、場所 (動物園 A、動物園 B、ホーム) に関連付けられます。私たちの場所に関連する「方向」(北、南、東、西)。フローチャート:
|----- | 'HOME'
|Place?| ----- > *destination = 'home'*
|----- |
Zoo A | Zoo B
|---------------|----------------------------------------|
|----------| |----------|
|Direction?| |Direction?|
|----------| |----------|
| North | North
----------- *destination = 'Zoo A North' ----------- *destination = 'Zoo B North'
| East | East
----------- *destination = 'Zoo A East' ----------- *destination = 'Zoo B East'
| South | South
----------- *destination = 'Zoo A South' ----------- *destination = 'Zoo B South'
| West | West
----------- *destination = 'Zoo A West' ----------- *destination = 'Zoo B West'
したがって、人物 X の場所が動物園 A で方向が南である場合、目的地は「動物園 A 南」である必要があります。
If ステートメントを使用して、現在かなり醜いコードがあります。
if(Place = 'HOME')
destination = 'HOME'
if(Place = 'Zoo A')
if(Direction = North)
destination = 'Zoo A North')
if(Direct = East)
destination = 'Zoo A East')
...
if(Place = 'Zoo B')
if(Direction = North)
destination = 'Zoo B North')
if(Direct = East)
destination = 'Zoo B East')
...
これを、変数を ENUM としてネストされたスイッチに変換できます。しかし、私はそれに陥る悪い癖があるので、if - else / switch への依存を避けようとしています。Factory Design を使用して Place クラスを生成する実験を行い、次に各場所と目的地でポリモーフィズムを使用しましたが、頭の中で複雑になりすぎました。if/switchs から離れる価値はありますか? 私はそれをオーバーエンジニアリングしようとしているだけですか?
このようなロジック フローに取り組む方法について何か提案はありますか? ありがとう