59

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

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

集約されたビューでそれを見ない場合、モデルはエンティティであり、ビューはXHTMLコードであり、コントローラーはマネージドBeanです。うーん...わかりました。しかし、ビューは多くの場合、一連のエンティティを返すビジネス ロジック呼び出しの実行に依存していませんか?説明はまだ適合しますか?

私が読んだある本では、マネージド Bean は、Faces サーブレット (コントローラー) がビジネス層 (モデル) を呼び出すために使用するある種の「メッセージ」をもたらすものであり、XHTML コードはビューであると説明されていました。

説明や違いが多すぎて、どれをどのように理解すればよいかわかりません。

4

4 に答える 4

108

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

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

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

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

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

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

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

JSF自体は概念を明示的に定義していませんが、バッキングBeanと呼ばれるマネージドBeanの使用法が頻繁に繰り返されます。

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

参照:

于 2012-04-11T21:19:21.320 に答える
8

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

  • モデル: 永続化 (Hibernate、JPA など) およびデータ モデリング (Java Beans) に使用するもの。
  • ビュー: xhtml、jsp など。
  • コントローラー: マネージド Bean。

JSF は、リクエスト/レスポンスを制御する機能を提供します。モデル/ビューを作成する方法は、フレームワーク MVC の概念に直接接続されていません。それは選択の問題です。MVC の概念はコード編成に関連しています。

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

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

于 2012-04-11T18:05:12.917 に答える