質問

Session Façade Core J2EE パターンの長所と短所は何ですか?

その背後にある仮定は何ですか?

これらの仮定は特定の環境で有効ですか?

役に立ちましたか?

解決

セッション ファサードは素晴らしいパターンです。実際には、ビジネス ファサード パターンの特定のバージョンです。そのアイデアは、ビジネス機能を TransferMoney()、Withdraw()、Deposit() などの個別のバンドルに結び付けることです。そのため、UI コードは、低レベルのデータ アクセスや、考慮する必要のないその他の詳細ではなく、ビジネス オペレーションの観点からアクセスします。

特にセッション ファサードでは、セッション EJB を使用してビジネス ファサードとして機能します。これにより、すべての J2EE サービス (認証/認可、トランザクションなど) を利用できるようになります。

お役に立てば幸いです...

他のヒント

Session Facade パターンの主な利点は、J2EE アプリケーションをビジネス機能ごとに論理グループに分割できることです。セッション ファサードは、UI から POJO によって呼び出されます (つまり、ビジネス デリゲート)、適切なデータ アクセス オブジェクトへの参照を持っています。例えば。PersonSessionFacade は PersonBusinessDelegate によって呼び出され、その後 PersonDAO を呼び出すことができます。PersonSessionFacade のメソッドは、少なくとも CRUD パターン (作成、取得、更新、および削除) に従います。

通常、ほとんどのセッション ファサードはステートレス セッション EJB として実装されます。または、トランザクションに AOP を使用している Spring 環境にいる場合は、トランザクション マネージャーのすべての結合ポイントとなるサービス POJO を作成できます。

SessionFacade パターンのもう 1 つの利点は、ある程度の経験を持つ J2EE 開発者であればすぐに理解できることです。

SessionFacade パターンの欠点:これは、J2EE 1.4 仕様の制限によって制約される特定のエンタープライズ アーキテクチャを前提としています (これらの批判については、Rod Johnson の書籍を参照してください)。最も有害な欠点は、必要以上に複雑なことです。ほとんどの企業では ウェブ アプリケーションの場合、サーブレット コンテナが必要になります。Web アプリケーションのストレスのほとんどは、HttpRequest またはデータベース アクセスを処理する層に発生します。したがって、サーブレット コンテナを EJB コンテナとは別のプロセス空間にデプロイすることは価値がないと思われます。つまり、EJB へのリモート呼び出しは、利益よりも苦痛を生み出します。

Rod Johnson 氏は、セッション ファサードを使用する主な理由は、コンテナー管理トランザクションを実行している場合であると主張しています。これは、より新しいフレームワーク (Spring など) では必要ありません。

ビジネス ロジックがある場合は、それを POJO に入れてください、と彼は言います。(私もこれに同意します。セッション EJB を実装するよりも、よりオブジェクト指向のアプローチだと思います。)http://forum.springframework.org/showthread.php?t=18155

対照的な議論を聞けてうれしいです。

J2EE 関連のことについて話すときは常に、舞台裏で大量の仮定が存在し、人々は何らかの形でそれを仮定しており、それが混乱につながるようです。(質問をもっと明確にすることもできたかもしれません。)

(a) EJB 仕様を通じて厳密な意味でコンテナ管理トランザクションを使用したいと仮定すると、

セッション ファサードは、低レベルのデータベース トランザクションを抽象化し、より高レベルのアプリケーション トランザクション管理を提供できるため、良いアイデアです。

(b) がセッション ファサードの一般的なアーキテクチャ概念を意味していると仮定すると、

サービスと消費者を分離し、その上にフレンドリーなインターフェイスを提供することは良いアイデアです。コンピューターサイエンスは、「間接的な層を追加する」ことで多くの問題を解決してきました。

Rod Johnson 氏は、「リモート インターフェイスを備えた SLSB は、RMI 上に構築された分散アプリケーションに非常に優れたソリューションを提供します。ただし、これは少数派の要件です。経験上、要件によって強制されない限り、分散アーキテクチャを使用したくないことがわかっています。適切に配置されたオブジェクト モデルの上にリモート ファサードを実装することで、必要に応じてリモート クライアントにサービスを提供することができます。」 (Johnson, R「EJB を使用しない J2EE 開発」p119)。

(c) EJB 仕様 (特にセッション ファサード コンポーネント) が優れた設計の展望を阻害するものであると考えると、次のようになります。

ロッド・ジョンソンは、「一般的には、SpringがEJBよりも有能な宣言的トランザクション管理を提供するため、SpringアプリケーションでローカルSLSBをまったく使用する理由はあまりありません。CMTは通常、ローカルSLSBを使用する主な動機です。したがって、EJB 層はまったく必要ない可能性があります。」 http://forum.springframework.org/showthread.php?t=18155

Web サーバーのパフォーマンスとスケーラビリティが主な懸念事項であり、コストが問題である環境では、セッション ファサード アーキテクチャはそれほど魅力的ではありません。データベースと直接通信する方が簡単になる可能性があります (ただし、これは階層化に関するものです)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top