6

私は Web プロジェクトを開発していますが、多くの調査の結果、JSF + Primefaces、Spring、および Hibernate のアプローチを進めることにしました。私のプロジェクトのアーキテクチャを設計している間、私は次のアプローチを完成させました:

アクター --> JSF+PrimeFaces ページ --- > バッキング Bean -- > サービス Bean -- > Dao -- > Hibernate

  • Service Bean と DAO は、依存性注入を備えた Spring Bean です。

現在、私の懸念はバッキング Bean に関するものです。レンダリングする必要があるページのタイプに応じて、UI ページに複数のバッキング Bean を使用する予定です。

たとえば、新しいユーザー登録ページの場合、UserBackingBean を使用する UserProfile.xhtml があります。UserBackingBean には、Spring によって注入された UserServiceBean があります。UserServiceBean には、Spring によって注入された UserDao があります。

UserBackingBean で、ユーザーが UserProfile.xhtml からフォーム データを入力すると、User.java ドメイン (ORM) オブジェクトを設定する必要があります。

a) これのベストプラクティスは何ですか? UserBackingBean のコンストラクターで User.java を初期化する必要がありますか? これは適切なアプローチですか?他の方法があれば提案してください。

b)また、私のプロジェクトで決定した上記のアーキテクチャについて提案してください。それは適切なアプローチですか?

4

1 に答える 1

2

私が従う一般的なルールは、トランザクション境界がサービスBeanでマークされているため、トランザクションがすでに実行されているかどうかわからないため、サービスの外部で休止状態のPOJOを変更することは好きではありません。したがって、バッキングBeanから、サービスレイヤーが休止状態のpojoを構築して保存、更新などするために必要なパラメーターをサービスレイヤーパスと呼びます。

これを行う別の方法は、バッキングBeanにサービス層によって定義されたインターフェースを実装させてから、バッキングBeanをサービス層に渡すことです。例えば。

public interface UserInfoRequest {
     public String getName();
}


@Service
public class SomeSpringService {

   @Transactional(.....) 
   public void registerNewUser(UserInfoRequest request)
   {

   }

}

public class SomeBackingBean implements UserInfoRequest {

    private SomeService someSpringService; 

    public void someMethodBoundToSJF()
    {
         this.someSpringService.registerNewUser(this); 
    }
} 

最後の質問ですが、私はJSFのファンではありませんが、JSFはサーバーコンポーネントベースのフレームワークであるため、根本的に欠陥があると思います。したがって、JSFに対する私の議論は、サーバー側のコンポーネントベースのフレームワークに対する一般的な議論です。

サーバー側のコンポーネントベースのフレームワークの主な欠点は、コンポーネントの出力を制御できないことです。つまり、コンポーネントの外観に固執します。外観が異なるものが必要な場合は、独自のコンポーネントを作成する必要があります。既存のコンポーネントを変更します。Webブラウザーは現在、アプリケーションUIの品質を実際に向上させることができる新機能を追加することで非常に急速に進化していますが、これらの機能にはHTML、CSS、およびJavaScriptを直接記述しなければならず、サーバー側のコンポーネントはそれを難し​​くします。

クライアント側のコンポーネントアーキテクチャはここにあり、サーバー側でコンポーネントを実行するよりもはるかに優れています。これが私のおすすめのスタックです。

クライアント側のアーキテクチャ:

  • jquery.js-すべてのブラウザをJavaScriptと同じように見せるための基本的なライブラリ
  • backback.js+underscore.js-高レベルのクライアント側コンポーネントベースのアーキテクチャ
  • handlebars.js-クライアント側テンプレート用
  • Twitterブートストラップ-CSSとウィジェットのまともなスターターセットを取得する

AJAXを使用してサーバー側モデルと通信するバックボーンビューとして編成されたHTML、CSS、およびJavaScriptでコードを記述します。再利用可能なコードを実際に作成するのに十分な構造で、クライアント側のユーザーエクスペリエンスを完全に制御できます。

サーバーサイドアーキテクチャ:

  • アノテーション駆動型SpringMVC、サービス、およびDao(@ Controller、@ Service、@ Repository)
  • タイプ別の自動配線によるスプリングコンポーネントスキャン(@ Autowired、@ Inject)
  • AspectJロードタイムウィービングまたはコンパイルタイムウィービング
  • Hibernate
  • Tomcat 7
  • Spring MVCのビューテクノロジーとしてのJSP(はい、それは不格好ですが、ほとんどの場合、usng <%@inculde>ディレクティブの場合はあまり多くのjspページを作成することはありません

ツール:-Springツールスイート-JRebel(サーバーを起動および停止する必要がないように)それは本当にお金の価値があります-Tomcat 7

于 2012-06-24T11:14:44.343 に答える