KohanaによるHMVCモデルに関する質問があります。私はスケーリングと簡単なAPIの作成のために同じ原則(MVC)内のコンポーネントとして要素を分離するというアイディアが本当に好きです。HMVC(Kohana)を使用した知識の喪失
いくつかの欠点がありますが、知識の損失のようなものがあります。
たとえば、私はニュースとカテゴリというコンポーネントを持つことができます。その上に、完全な要求を委譲し、これらのコンポーネントを通じてサイトテンプレートのすべてのhtml /データを収集するサイトコントローラがあります。
Site controller
/ \
/ \
categories news
サイドバーのすべてのカテゴリが必要な場合は、/ categories/listを呼び出すことができます。ニュースアイテムが必要なときは、私は/ news/IDを呼び出すことができます。どちらもHTMLを返します。
メインタスクでニュース記事を表示するニュースリーダーサイトコントローラがある場合、このコントローラはサイドバーのすべてのカテゴリを取得します。次に、ニュース項目を取得します。
Newsreadon
/ \
/ \
categories/list (html) news/<id> (html)
私はHTMLのタイトルタグのためのニュースの「タイトル」を知りたいサイトテンプレート内のすべての要素を表示するが、私は、HTMLを返すので、私は知ることができない
。複数の解決策があるような気がします:
- ストアいくつかのレジストリ内のタイトル(しかし、私は他のサーバにコンポーネントを拡張し、HTTPを使用している場合、これが失われているが)。スケーリングの観点から、良い選択はありません。
- jsonに 'title'と 'html'フィールドを返します。
- タイトル
ソリューション2のためのH2のようなHTMLの一部を読む以上に厄介であるように思わタクトでステートレスな通信を維持します。
私は本当にどのようにこれはエレガントな方法でこれを解決するだろうか?私は '解決策'が欠けていますか?
EDIT:KohanaのでHMVCを理解する 興味深い読み取り: http://techportal.inviqa.com/2010/02/22/scaling-web-applications-with-hmvc/
しかし、私はニュースを「ウィジェット」と見ています。もし私がnewsreadonコントローラがモデルにアクセスできるようにすれば、モデルにアクセスするコントローラは2つあり、ワーストケースの場合は適切なキャッシュがないとデータベースがあります。これは私にとって余分なカップリングのように聞こえる。 – mauserrifle
@mauserrifle、私は同じモデルに2度アクセスするアプリケーションについては心配しません。簡単に最適化できるからです(あなたが言ったように、キャッシュすることができます)。しかし、要求またはコントローラ間の双方向の依存関係は、明らかな方法で最適化することはできません。基本的には、同じデータにアクセスする必要がある2つのコントローラがあります。モデルを介してこのデータに直接アクセスし、他のコントローラが何をしているのかを推測する必要はありません。 –
私はあなたの視点を理解し、私は躊躇しました。しかし、私は心配しています。なぜなら、ウィジェット/コンポーネントが他のサーバーに拡張されたとしても、サイトコントローラがこのモデルを使って直接ビジネスを行うことを望まないからです。コンポーネントからデータを取得して表示し、最終的にPOSTリクエストをコンポーネントに渡すことができます。このように、それは分離されており、ウェブサイトはコンポーネントのクライアントに過ぎません。私たちは将来的にモバイルアプリケーションを作る計画を持っています。このような分離方法で、コンポーネントはすべてのビジネスを行うことができ、ウェブサイトとモバイルアプリケーションは同じゲートウェイを使用するクライアントに過ぎません。 – mauserrifle