私は最近、Neil Griffinがさまざまな種類のJSFマネージドBeanを区別することからこの記事を読み、自分のアプリケーションでのさまざまなBeanの区別について考えさせられました。要点をすばやく要約するには:
モデルマネージドBean:このタイプのマネージドBeanは、MVCデザインパターンの「モデル」の問題に関与します。「モデル」という言葉を目にしたときは、DATAと考えてください。JSFモデルBeanは、プロパティをカプセル化するゲッター/セッターを備えたJavaBeanデザインパターンに従うPOJOである必要があります。
Managed-Beanのバッキング:このタイプのManaged-Beanは、MVCデザインパターンの「ビュー」の問題に関与します。バッキングBeanの目的は、UIロジックをサポートすることであり、JSFビューまたはFaceletコンポジションのJSFフォームと1:1の関係にあります。通常、ゲッター/セッターが関連付けられたJavaBeanスタイルのプロパティがありますが、これらはビューのプロパティであり、基になるアプリケーションデータモデルのプロパティではありません。JSFバッキングBeanには、JSFactionListenerメソッドとvalueChangeListenerメソッドも含まれる場合があります。
Controller Managed-Bean:このタイプのManaged-Beanは、MVCデザインパターンの「Controller」の問題に関与します。コントローラBeanの目的は、ある種のビジネスロジックを実行し、ナビゲーション結果をJSFナビゲーションハンドラに返すことです。JSFコントローラーBeanには通常、JSFアクションメソッドがあります(actionListenerメソッドはありません)。
マネージドBeanのサポート:このタイプのBeanは、MVCデザインパターンの「ビュー」に関する1つ以上のビューを「サポート」します。典型的な使用例は、複数のJSFビューに表示されるJSF h:selectOneMenuドロップダウンリストにArrayListを提供することです。ドロップダウンリストのデータがユーザーに固有のものである場合、Beanはセッションスコープに保持されます。
ユーティリティ管理対象-Bean:このタイプのBeanは、1つ以上のJSFビューにある種の「ユーティリティ」機能を提供します。この良い例は、複数のWebアプリケーションで再利用できるFileUploadBeanです。
これは私にとって理にかなっており、過去数時間、コードをリファクタリングしていて、ユーザーログインに関して次のことを思いついた。
これAuthenticationController
は、ControllerManaged-Beanの例です。これはリクエストスコープであり、ユーザー名とパスワードを設定するための2つのゲッターとセッター、および2つのナビゲーション方法を備えauthenticate
ておりlogout
、ログインに成功するとプライベートエリアに移動するか、ログアウトするとメインページに戻ります。
これUserBean
は、サポート管理対象Beanの例です。これはセッションスコープでありUser
、ゲッターとセッターを備えたクラスのインスタンス(認証されていない場合はnullになります)を備えています。
はAuthenticationController
、このユーザーを管理プロパティ(@ManagedProperty(value = "#{userController.user} private User user;
)として持っています。認証が成功すると、AuthenticationController
は管理プロパティを、ログインに使用された対応するユーザー名を持つ実際のユーザーインスタンスに設定します。
User
クラスにグループ名のリストが含まれている場合、新しいBeanはすべて、ユーザーを管理プロパティとして取得し、必要なデータ(たとえば、グループメンバーシップなど)を取得できます。
この方法は、関心の分離に関して進むための適切な方法でしょうか?