131

Kohanaのドキュメントを読んで、3.0バージョンの主な違いは、バージョン2.xのようにMVCではなくHMVCパターンに従うことであることがわかりました。コハナのドキュメントのこれに関するページとウィキペディアのページは、私に明確な考えを本当に与えませんでした。

質問:HMVCパターンとは何ですか?MVCとはどのように異なりますか?

4

5 に答える 5

86

Sam de Freyssinet(Kohana開発者の1人)は、 HMVC 、それが何であるか、そしてそれがどのように使われることができるかについてかなり詳細な記事を書きました。

リンクが無効です:新しいリンク-https: //web.archive.org/web/20160214073806/http ://techportal.inviqa.com/2010/02/22/scaling-web-applications-with-hmvc/

于 2010-03-01T13:14:12.770 に答える
58

私は現在、 Alloyと呼ばれる独自のPHP5.3HMVCフレームワークを開発中です。私はHMVCに多額の投資と販売を行っているので、別の視点を提供できると思いました。おそらく、HMVCを使用する理由とそれがもたらすメリットについてのより良い説明を提供できると思います。

HMVCアーキテクチャを使用する最大の実用的な利点は、コンテンツ構造の「ウィジェット化」です。例としては、コメント、評価、TwitterまたはブログのRSSフィードの表示、eコマースWebサイトのショッピングカートのコンテンツの表示などがあります。これは基本的に、メインのHTTPリクエストのコンテキストに応じて、複数のページにまたがって、場合によっては異なる場所に表示する必要があるコンテンツの一部です。

従来のMVCフレームワークは通常、これらのタイプのコンテンツ構造に直接的な答えを提供しないため、一般的に、レイアウトの複製と切り替え、カスタムヘルパーの使用、独自のウィジェット構造またはライブラリファイルの作成、または要求されたメインからの無関係なデータの取り込みが発生します。ビューにプッシュスルーして部分的にレンダリングするコントローラー。特定のコンテンツをレンダリングしたり、必要なデータを読み込んだりする責任は、複数の領域に漏れて、使用される場所で複製されるため、これらは特に適切なオプションではありません。

HMVC、または具体的にはこれらの責任を処理するためにコントローラーにサブリクエストをディスパッチする機能は明らかな解決策です。あなたが何をしているのかを考えると、それはコントローラーの構造にぴったり合っています。コメントに関するデータをロードし、HTML形式で表示する必要があります。したがって、いくつかのパラメータを使用してコメントコントローラにリクエストを送信すると、モデルと対話し、ビューが選択され、ビューにコンテンツが表示されます。唯一の違いは、完全に別個の完全なコメントページではなく、ユーザーが表示しているブログ記事の下にコメントをインラインで表示することです(ただし、HMVCアプローチでは、同じコントローラーと「kill」を使用して、内部リクエストと外部リクエストの両方を実際に処理できます。ことわざにあるように、1つの石で2羽の鳥」)。この点について、HMVCは、実際には、コードのモジュール性の向上、再利用性の向上、および関心の分離の改善に努めることの自然な副産物にすぎません。これがHMVCのセールスポイントです。

したがって、 HMVCでのスケールアウトに関するSam de FreyssinetのTechPortalの記事は興味深いものですが、HMVCフレームワークを使用する人々の90%以上が、実際の実用的な日常のメリットを享受できる場所ではありません。

于 2011-04-20T20:21:37.113 に答える
7

HMVCは、ディスパッチングに対する「コンポーネントベース」のアプローチと密接に関連しています。基本的に、コントローラーに委任する単一のディスパッチャーを持つ代わりに、各コントローラーはそれ自体がディスパッチャーとして機能できます。これにより、コントローラーの階層が得られます。設計はより柔軟で、コードのカプセル化が向上しますが、抽象化が高くなります。Konstruktは、このパターンを中心に設計されています。

この回答も参照してください:https ://stackoverflow.com/questions/115629/simplest-php-routing-framework/120411#120411

于 2010-02-15T10:43:56.553 に答える
7

コハナでは、少なくともHMVCリクエストは「内部」で処理されるHTTPリクエストです。ネットワーク経由で発行されるのではなく、フレームワーク自体によってルーティング、ディスパッチ、処理されます。「HMVC」と「MVC」という名前の類似性は、実際には存在しない用語間の根本的な関係を示唆しているという点で混乱を招きます。一方はマイナーな異形または他方の変更ではなく、完全に異なるものです。(HMVCは、クライアント側のHTTPリクエストなしのAjaxとも呼ばれます。)コハナが「HMVC」を強調し、サポートしているということは、フレームワークがHTTPベースのサービス指向アーキテクチャを強力にサポートしていることを意味します。

このアーキテクチャパターンの利点は、内部要求と外部要求に同じ「呼び出し規約」が使用されるため、必要に応じて「内部」サービス要求を「外部」要求に、またはその逆に変換するのが簡単なことです。

これは賢明なアーキテクチャパターンですが、独自の名前を付ける必要はないようです(Symfony2は同じ概念「サブリクエスト」を説明しています)。実際、名前は誤った名前のようです。リクエストが階層(すべての命令型プログラムの標準のコールグラフを除く)。たとえば、リクエストは簡単に再帰的になる可能性があります。

[ 2011年4月の更新、2012年3月:コメントへの回答を拡張。]

于 2010-07-05T22:33:36.507 に答える
5

HMVCは階層モデルビューコントローラーです。通常のMVCでは、すべてのGUIオブジェクトにMVCがありますが、HMVCとは異なり、親GUIオブジェクトと子GUIオブジェクトの間に関係はありません。HMVCでは、各GUIオブジェクトはその子オブジェクトにアクセスでき、各子オブジェクトはその親オブジェクトにアクセスできます。

したがって、すべてのビューに親ビューがあります。これを介して、親ビューにアクセスできます。すべてのコントローラーには、イベントを親コントローラーに渡すことができる親コントローラーがあります(イベントがそのスコープにない場合)。

詳細な説明については、ここをクリックしてください

新しいリンクはこのアドレスです

于 2011-06-07T09:39:41.387 に答える