2

現在、アプリケーションの 1 つで ZK フレームワークを使用しています。ZK フレームワークは MVC と MVVM デザイン パターンをサポートしています。新しいプロジェクトでは、JSF を使用したいと考えています。JSF は設計パターンの両方をサポートしていますか、それとも MVC のみをサポートしていますか?

4

2 に答える 2

2

MVVMについて不必要な仮定をしているため、user2860053の回答には同意しません。MVVM は、クライアントとサーバーの責任に関するものではありません。引用されたブログ投稿は、クライアント側のMVVM (knockout.js による実装として) とサーバー側の MVVMの組み合わせを含む特定の Web アプリケーション シナリオは、JSF ではうまく機能しないと主張しているだけです。サーバー側のMVVMについては何も述べていません。

私の理解では (IMO は、 ZK のドキュメントでも参照されている元の定義に対応しています)、MVVM の中心となるアイデアは次のとおりです。

  • a) UI の具体的な構造、コントロール、およびレイアウト (つまりビュー) とその状態と動作 (つまりビューモデル) の間の区別を維持するため、および
  • b) 双方向データバインディングを使用してこれらをリンクします。

比喩的に言えば、「MVC」から始めて、パート a) は「VM」を追加し、パート b) は「C」を削除して、「MVVM」を生成します。

MVC では、コントローラーは特定のビュー クラス/インターフェイス用に作成されます。ビューからユーザー入力を読み取り、変換してモデルに書き込み、ユーザーのアクションに従ってビジネス ロジックを呼び出すのは、コントローラーの役割です。

対照的に、MVVM には、ビューまたはモデルと密接に結合されたコントローラーはありません。代わりに、ビューにデータを入力し、ユーザー入力を変換してモデルに供給し、コントロールをビジネス コード (またはビューモデルからのプレゼンテーションのみのアクション) にバインドするために、宣言型の双方向データ バインディングを使用する一般的なメカニズムがあります。

では、これはどのように JSF に適用されるのでしょうか?

JSF では、作成する Facelets ページごとにコントローラーを作成するのではなく、送信されたフォームからのデータをモデル要素に入力し、EL バインディングに従ってユーザーのアクションに従ってメソッドを呼び出す作業を JSF ライフサイクルに任せます。プロパティ b) は、JSF に対して常に保持されます。

最初のプロパティ a) に関しては、高レベルのビュー ステートと動作を個別のクラスに実装するのはプログラマ次第です。JSF は、ビュー ステートと動作のコンポーネントの作成により重点を置いています。ビューモデルは、1 種類のビュー専用に作成され、ビューの抽象的な状態と動作全体をモデル化するため、「軽量」の複合コンポーネントでさえ、ビューモデルの役割を果たすには一般的すぎると思います。しかし、開発者がこのために独自のクラスを作成することを妨げるものは何もありません。つまり、独自のビューモデル クラスを作成し、それらを EL コンテキストにバインドします。

結論として、JSF は MVVM 専用に作成されたものではありませんが、(サーバー側の) MVVM の実装に使用できるメカニズムが含まれています。

于 2016-05-04T16:34:42.603 に答える