1

JSFとSpringおよびHibernateを使用した単純なログイン画面の実装。私はSpringでサービスとデータレイヤーBeanを作成し、それらをHibernateと統合しました。

JSFでユーザーIDとパスワードの2つのフィールドを使用してサインアップ(新規ユーザー作成)画面を定義し、それらをマネージドBeanに接続しました。(Bean名:ユーザー)ここでは、このBeanはドメインクラスでもあります。

次に、JSFビューの作成ボタンをクリックして、Service Beanメソッド(Spring Bean)を呼び出す必要があります。このため、私には2つの方法があることがわかります。

  1. 指定されたユーザーとパスワードを取得し、Spring Service Beanメソッドを呼び出すメソッドをUsers管理対象Beanに記述します。このメソッドは、DBにデータを保存するためのDAOBeanメソッドを呼び出します。しかし、ここで私の質問は、ドメインクラスでコントローラーのようなメソッドを書くことがどれだけ良い習慣であるかということです。

  2. 2番目の方法は、Spring Serviceオブジェクトをプロパティ(spring + jsf統合を使用して注入される)およびサービスBeanメソッドを呼び出すメソッドとして持つ新しいManagedBeanを定義することです。

私は正しいデザインをしていますか?何か問題がありますか?より良いデザインを提案してください。

ありがとう

4

1 に答える 1

2

ドメインクラスをjsfマネージドBeanにしないでください。

一般的に私が従うのは、ドメインクラスと他のUIサポートプロパティをフォームBeanにカプセル化し(シナリオが複雑な場合、それ以外の場合はマネージドBeanのプロパティとして直接エンティティ)、マネージドBeanにそれを含めることです。

スプリングサービスはマネージドBeanに注入され、アクションフォームでBean /エンティティBeanはビジネス/ユースケースの処理と永続化(dao /リポジトリ)のためにスプリングサービスに渡されます。

テンプレートコード:

@ManagedBean
public class Bean{

  private Entity entity;//or
  private FormBean formBean;

  @Inject private Service service;

  public String doAction(){
    //error processing from service layer and UI message handling
    service.process(entity);//or
    service.process(formBean);
    return Navigation.Constant;
  }
}  

マネージドBeanの目的は、ビューデータを収集し、それをサービスに渡して処理することです。ドメイン/エンティティクラスをマネージドBeanとして作成すると、再利用性に適さないJSFライブラリと結合することになります。設計原則SRP(単一責任原則)に従って、クラスは1つの責任を持つ必要があります。その場合、クラスはより多くの責任を負うことになり、したがって上記のように良い習慣ではありません。

あなたが述べたようにポイント2はより良いです。

お役に立てれば !!!!

于 2012-03-30T05:51:37.387 に答える