1

この「問題」の一般的なアプローチ(またはデザインパターン)は何ですか?

  1. 私はWebアプリケーションにたくさんのコントローラーを持っています(正確にはJAVAでのストラットアクション)。
  2. 一部のコントローラーは、ユーザーのセッションで変数を設定します。
  3. 一部のコントローラーは、これらの変数を使用したり、削除したり、変更したりします。

誰が何を、どのような状態で、どこで変更するのかを知るのは難しいので、面倒です...

Mediatorパターンを使用する必要があります:http: //en.wikipedia.org/wiki/Mediator_pattern

または、次のようなファサードパターン(c#の例): http: //foxsys.blogspot.ca/2007/01/session-facade-aspnet-c.html

または、他の何か?


変数のワークフローの例と、それがどのように乱雑になる可能性があるか:

  1. ユーザーは好みの製品を選択します。ChooseProductControllerは、セッション中の優先製品のIDを設定します

  2. ユーザーがアカウントを作成します。CreateAccountControllerは、優先製品がセッション中であるかどうかを確認します。その場合は、このIDでDBにアカウントを作成します

  3. ユーザーはログインしています。LoginControllerは、優先製品がセッション中であるかどうかを確認します。アカウントが作成されたときのDBのものと異なる場合、ビューは、使用者に優先製品を選択するように求めるメッセージを表示する必要があります。

4

1 に答える 1

2

最初のアドバイス:セッションをできるだけ使用しないでください。セッションの存続期間と同じ存続期間を持ち、データベースから簡単にまたは十分に高速に取得できないものにのみ使用するようにしてください。

2番目のアドバイス:セッションを直接使用しないでください。セッションへのアクセスを1つまたはいくつかの専用クラスにカプセル化します(セッションがインメモリデータベースであることを除いて、データベースの場合と同じように)。する代わりに

Product preferredProduct = (Product) session.getAttribute("preferredProduct");

、次のようなことをします

SessionStore.getInstance(session).getPreferredProduct();

これは読みやすく、エラーが発生しにくく、優先製品が取得または設定されているすべてのコードベースで簡単に見つけることができます。

于 2012-09-19T21:30:57.520 に答える