0

セッションの属性として多くの変数を格納するアプリケーションがあります。属性が必要になるたびに、属性名が正確に何であったかを覚えておき、それを使用するためにその型にキャストし直す必要があります。

これらすべての変数を含む単一のオブジェクトを使用することを検討していました。これを「SessionManager」のような名前にして、属性名を 1 つだけ覚えればキャストが失敗しないようにします。

これがパターンだったのか、それとも類似またはより優れた既存のパターンがあるのか​​ 疑問に思いましたか?

4

1 に答える 1

0

セッションにはある種のキャッシュが必要なようです。

属性名を知らずにはいられません。ただし、各オブジェクト タイプに特化したメソッドを使用してキャスト部分をスキップすることもできます (理想的には、プリミティブ以外の多くの異なるタイプはありません)。

あなたが Java EE について言及しているので、インターフェイスで定義された次の操作を実装するステートレス Bean を使用します。

String getString(string fieldName);
int getInt(string fieldName);
DateTime getDateTime(fieldName);
...
object getObject(fieldName); // for special scenarios
void setInt(string fieldName, int value);
void setString(String fieldnName, String value);
...

Bean の実装では、柔軟性を高めるために追加します。

前のインターフェースを実装する 2 つのクラスを定義します (bean クラス以外に)。1 つはメモリから値を保存して読み取ることができ、もう 1 つはデータベースからそれを行うことができます。そして、使用したいクラスを選択できる戦略パターンを追加します (ここでも Java EE を使用しているため、これはアプリケーション サーバー変数である可能性があります)。

要約すると:

必要なタイプを公開するインターフェイスを作成します (キャストを避けるため) EJB に上記のインターフェイスを実装します 使用したいさまざまなデータ ストアと同じ数のクラスに上記のインターフェイスを実装します 単純な戦略パターンを実装します (専用クラス、スイッチは必要ありません)適切なクラスを選択します。コードから EJB クライアントを呼び出します。

それが役立つことを願っています

于 2012-08-21T14:14:19.667 に答える