web-dev-qa-db-ja.com

MSFフレームワークとしてのJSFの理解

私はJSFを読んでいますが、JSFがMVCフレームワークである(または少なくともどの部分がどの「文字」に属するのか)かなり混乱しています。

私はこの質問を見ました: JSF MVCフレームワークのMVCとはどのコンポーネントですか?

モデルがエンティティであり、ビューがXHTMLコードであり、コントローラーがマネージドBeanである集約ビューでそれを見ない場合、私はそこを読みます。うーん...しかし、ビューは多くの場合、たとえばエンティティのセットを返すビジネスロジックコールをさらに実行することに依存していませんが、説明はまだ当てはまりますか?

マネージドBeanとして説明した1冊の本は、Faces Servlet(コントローラー)がビジネスレイヤー(モデル)を呼び出すために使用する、ある種の「メッセージ」ブリーダーであり、XHTMLコードがビューです。

説明や相違点が非常に多いので、それをどのように、またはどのように理解すればよいかわかりません。

54
LuckyLuke

JSFや他の多くのWebフレームワークで、そのどの部分がMVCのどの部分に対応するかが完全に明確でないことが多い理由の一部は、MVCパターンが元々デスクトップアプリケーション用に考案されたためです。

デスクトップアプリケーションでは、ノードM、V、およびCは最大接続グラフです。つまり、各パーツは他のすべてのパーツと通信できます。例えば。モデルが変更された場合、この変更をビューにプッシュできます。これは、デスクトップアプリケーションにビューの表現が複数ある場合に特に顕著です。 1つを変更し、他の更新をリアルタイムで確認します。

Webアプリケーションのクライアント/サーバーおよび要求/応答の性質により、従来のMVCはほとんどのWebフレームワークに1:1でマッピングしません。

具体的には、JSFでのマッピングは次のとおりです。

  • Model-Services/DAOとそれらが生成および消費するエンティティ。これへのエントリポイントはマネージドBeanです。ただし、Java EE(JSFの一部))では、これらのアーティファクトは通常、それぞれEJBとJPAによって実装されます。
  • View-UIコンポーネントとそのフルページへの構成。これは完全にJSFのドメイン内にあり、JSF UIComponentsおよびFaceletsによってそれぞれ実装されます。
  • Controller-コマンドとユーザーからの着信データを処理し、これを適切な部分にルーティングし、表示するビューを選択する交通警官。 JSFでは、このコントローラーは作成しませんが、フレームワークによって既に提供されています(FacesServletです)。

特に最後の部分はよく理解されていないことがよくあります。JSFではコントローラーを実装しません。したがって、バッキングBeanまたはその他の種類のマネージドBeanは、[〜#〜] not [〜#〜]コントローラーです。

最初の部分(モデル)も常に明確に理解されているわけではありません。ビジネスロジックはEJBとJPAによって実装できますが、JSFの観点からは、値バインディングによって参照されるすべてがモデルです。これは、JSFライフサイクルフェーズの1つの名前の由来でもあります。Update Model。このフェーズでは、JSFはデータをUIコンポーネントからモデルにプッシュします。その意味で、(JSF)管理対象Beanはモデルです。

JSF自体は明示的に概念を定義していませんが、backing beanと呼ばれるマネージドBeanの頻繁な特定の使用があります。

JSFの場合、バッキングBeanは依然としてモデルですが、実際にはモデル、ビュー、コントローラーの中央に位置する配管要素です。一部のコントローラータスクと見なされる可能性のあるいくつかのタスクを実行するため、これは多くの場合、コントローラーであると誤解されます。しかし、前に説明したように、これは正しくありません。また、一部のモデルタスクを実行し、場合によっては表示ロジックも実行できます。

こちらもご覧ください:

101
Arjan Tijms

ミニマリスト形式では、次のとおりです。

  • モデル:永続化(Hibernate、JPAなど)およびデータモデリング(Java Beans)に使用するもの。
  • 表示:xhtml、jspなど.
  • コントローラー:管理されたBean。

JSFを使用すると、要求/応答を制御できます。モデル/ビューを作成する方法は、フレームワークMVCコンセプトに直接接続されていません。それは選択の問題です。 MVCの概念は、コード編成に関連しています。

同様に、StrutsはMVCフレームワークですが、主にコントローラーとして機能します。

あなたのアイデアをより明確にするのに役立つと思います。

7
axcdnt

マネージドBeanのアイデアの興味深い点は、モデル(MVCパターン)またはコントローラー( mediating-controller MVC pattern 、model-view-adapterとも呼ばれる)の両方として使用できることです。モデルとビューは直接相互作用しません。

後者の場合、ビジネスロジックはマネージドBeanに含まれ、モデルは厳密にドメインモデルであるため、ルーティングメカニズムはコントローラーではありません。その後、次のものがあります。

  • Model-ほとんどの場合、データベース内のテーブルを表すドメインモデルを含み、DAOを通じて永続化されます。

  • View-Beanに接続されたUIコンポーネント。

  • Controller-ビジネスロジックを含み、ビューとモデル間の通信を処理するマネージドBean。

一部の人々は、調停コントローラーMVCを単純なMVCと混同していると思います。

6
Tarek

ここのすべてのアンサーは正しいと思います。しかし、混乱の主なポイントは、フレームワーク(ここではJSF)から来るmvcコンポーネントの定義と、アプリケーション設計で定義するモデルおよびコントローラーコンポーネントを混合することから生じます。

2
Ben