私が取り組んでいるアプリケーションには、単純で最も一般的なユースケースに単一オブジェクトの構成が含まれる多くのケースがありますが、場合によっては、ベースオブジェクトをサブオブジェクトに分割してから各サブオブジェクトを構成する必要があります。
この具体的なケースは、ジョブのスケジューリングです。単純なケースでは、各ジョブの設定を使用して、入力する必要があるジョブのリストを作成します。ただし、一部のジョブは複数のシフトに分割され、各シフトにはいくつかの構成が必要です。
素朴なアプローチは、すべてのジョブにシフトがあることだけを要求することです。1シフトが有効な構成です。
ユーザーがジョブとシフトを設定する場合、シフトが1つだけのジョブに対してシフトをセットアップする必要があるのは面倒です。彼らはそれを「単なる仕事」と考えており、シフトは無関係で不必要であると見なされています(この場合はそうです)。
だから、これをもっと良くしたい。正しい概念的な解決策は、「ジョブ」を作成でき、シフトが必要な場合はシフトも追加できるということだと思います。
これは「プログレッシブ開示」設計ソリューションのように感じます。たとえば、「シフトの追加」をクリックすると、シフト編集インターフェースが表示されます。
重要な点の1つは、シフトがない場合にのみ適用されるジョブのデータ要素がいくつかあることです。それ以外の場合、そのデータはシフト定義の一部です。この場合、ユーザーは、ジョブにサインアップするために、指定された数の「ポイント」を獲得できます。しかし、シフトが定義されている場合、ポイントではないのは仕事ではなくシフトです。
ビンゴの夜のジョブとシフトの例は次のようになります。
Job:Setup -- 2pts
Job:Ticket Taker
Shift:1st shift -- 4pts
Shift:2nd shift -- 3pts
Job:Bingo Announcer
Shift:1st shift -- 5pts
Shift:2nd shift -- 5pts
Shift:Until end -- 6pts
Job:Cleanup -- 3pts
重要な点は、シフトがあるジョブとシフトがないジョブがあります。シフトのないジョブには、ポイント値が直接ジョブに割り当てられます。シフトがあるジョブには直接のポイント値はありませんが、各シフトにはポイント値があります(ポイントはシフトごとに異なる場合があります)。
私は主に、ジョブとシフトのセットアップのUIに関心があります。たとえば、管理者ユーザーは、イベントに必要なジョブとシフトを定義できます。 (ジョブ/シフトにサインアップするためのUIとは対照的に)。
これを考える1つの方法は、すべてのジョブに「組み込み」シフトがあり、その構成はジョブ構成に折りたたまれていることです。この考え方は、誰かが「シフトの追加」をクリックし、最初の(組み込み)シフトがすでにリストにあるときに明らかになります。
このアプローチの問題は、ユーザーが残りのシフトのみを削除しようとするとどうなるかです。ジョブの「シフトなし」モードに戻りますか?もしそうなら、その時点でのジョブの「ポイント」値はどうあるべきですか?
状況によってはサブオブジェクトのコンテナになる可能性がある単純なオブジェクトのこのパターンは、このアプリで複数回表示されています。仕事/シフトはほんの一例です。その他の例としては、グループ/サブグループ、イベント/セッション、組織/部門、製品/サイズなどがあります。
これは問題を解決する必要があるように感じます。
この条件付き階層の複雑さを徐々に明らかにするという本当に良い仕事をするUIの例を考えられますか?
このパターンの名前を知っていますか?
私が解決しようとしているUXの問題を説明する適切な単語を見つけるのに苦労しました。この問題/解決策の名前がある場合、いくつかの省略形を学びたいと思います。
あなたが直面している本当の問題は、シフトを1つしか利用できないシフトを取り除こうとすることです。シフトとは、デフォルトのシフトはそれ自体が予定された労働シフトではないので、消費しやすい労働時間を意味します。デフォルトのシフトは、(ほとんどの場合) Dolly Partons Nine to Five と同じくらいの日中スケジュールです。
システムのユーザーは、削除できない昼間のシフトがあることを認識する必要があります。これは、ビンゴナイトのすべての労働者が異なるシフトを持っている場合、誰もそのシフトに取り組んでいない場合でも、ユーザーが追加するすべてのジョブにデフォルトの昼間のシフトを設定することでおそらく最善の方法です。これらのデフォルトの削除不可の労働時間は、ユーザーが追加したシフトとは必ず異なるものにしてください。
あなたの意図を完全に誤解した場合は、コメントでアドバイスしてください。この重要なアーキテクチャの問題を解決するために最善を尽くします。
折りたたみという言葉が当てはまるかもしれません。この概念は、プログラマーが関数本体または条件付きステートメントをfold(または折りたたむ)できるようにするテキストエディターの機能に似ており、それによって外部レベルのみを表示します。 。折り畳まれたレベルは、他の折り畳まれたレベル内にネストできます。