私のユースケースは次のとおりです。
注文明細、顧客、および支払いの詳細を使用して注文を管理します。
このアプリは、既存の注文を編集したり、新しい注文を作成するために注文の詳細ビューを開くことができる注文リスト ビューで構成されています。注文の詳細ビューはビュー パラメーターを使用します (既存の注文 ID、または作成される新しい注文を示すものは何もありません)。
注文詳細ビューが開かれると、OrderControllerBean が ConversationalScope を開始し、注文 ID の可用性に応じて新しい注文エンティティをロードまたは作成します。この Bean はステートフル セッション Bean であり、ファサードとして使用することを意図しています。この Bean には、注文明細、顧客、および支払いの詳細を処理するためのメソッドと、注文を保存および削除するためのメソッドが含まれています。これらのメソッドは、ある種の DAO としてステートレス セッション Bean として設計された注入された EJB を使用して、JPA エンティティの注文、注文明細、顧客、および支払いの詳細を処理します。
ユーザーは、顧客情報、支払い情報、および注文明細リストを含む注文詳細ビューから、注文明細を追加/編集する注文明細詳細ビューと、同様の方法で顧客および支払い詳細ビューに移動できます。これらの詳細ビューはすべて同じ OrderControllerBean を使用します。顧客、注文明細、および支払いの詳細ビューには、トランザクションではない [OK] ボタンと [キャンセル] ボタンがあります。
注文の詳細ビューには、会話中に行われたすべての変更を保存する [保存してキャンセル] ボタンがあります。
私が今持っている質問は、このデザインは適切で大丈夫ですか?
次の問題についてはよくわかりません。
ユーザーが保存またはキャンセルを使用しなかった場合はどうなりますか?
変換またはセッションがタイムアウトするまで、すべてが維持されますか? これはトランザクションの観点から何を意味するのでしょうか? これは、管理対象エンティティにとって何を意味しますか? ユーザーが職場を離れ、後で会話の作業を続けて戻ってきた場合はどうなりますか? 会話がタイムアウトした場合、この問題を適切に処理するにはどうすればよいですか?