関係性のパターン:ジェネレーター/シミュレーターパターン
ウィザード
ジェネレーターは「入力値に応じて適切なものを生成して欲しい」といった発想から生まれます。入力画面でユーザーが何かを入力し、その後生成ボタンを押すと結果が表示されるようなタスク指向のウィザードになりやすいので注意が必要です。
この発想を整理する観点は2つあります。
1つめは、生成されるものをオブジェクトとして考え、入力画面はオブジェクトの新規作成アクションの一種だと考えることです。
ウィザードと履歴
具体的には、まず生成されるものに注目してみましょう。大抵は何かが生まれます。この生成されたものを振り返ることがあるでしょうか。ある場合は一覧が必要です。
この時点では生成するための画面と生成履歴画面が必要になるはずです。生成するための画面は特に変更なく、タスク指向的な画面のままです。
コレクションと新規作成
これをオブジェクト指向の考えで整理してみましょう。生まれた何かを生成物オブジェクトとして定義したとします。そうすると生成履歴画面というのは生成物オブジェクトのコレクションとして扱うことができます。そして「生成する」画面は生成物オブジェクトの新規作成アクションとしてデザインすることができるはずです。
ジェネレーターとシミュレーター
2つめの観点は、入力値に応じて生成結果が動的に変化するように変えることで、生成のための入力と生成されるものを並列に扱うことです。
一定の手順を経た入力を元に出力を返すジェネレーターではなく、入力するごとにリアルタイムに結果が生成されるようにします。ユーザーからすればすぐに結果が生成されますのでシミュレーターのように感じることができます。(もちろんリアルタイム性がジェネレーターかシミュレーターかを区別するわけではないので、シミュレーターも「シミュレート結果をリアルタイムでジェネレートしている」と表現することも可能です)
生成するための設定は生成物オブジェクトのプロパティに位置付けられます。ということは生成物オブジェクトのシングルでプロパティを設定し直すことも可能になります。入力をまとめてコンピューターに投げて少ししてから結果を受け取るような固定的な手順ではなく、ユーザーは入力値と結果を同時に見ながら何度でも調整することができるようになります。