2012-02-20 9 views
2

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を返すので、私は知ることができない

複数の解決策があるような気がします:

  1. ストアいくつかのレジストリ内のタイトル(しかし、私は他のサーバにコンポーネントを拡張し、HTTPを使用している場合、これが失われているが)。スケーリングの観点から、良い選択はありません。
  2. jsonに 'title'と 'html'フィールドを返します。
  3. タイトル

ソリューション2のためのH2のようなHTMLの一部を読む以上に厄介であるように思わタクトでステートレスな通信を維持します。

私は本当にどのようにこれはエレガントな方法でこれを解決するだろうか?私は '解決策'が欠けていますか?

EDIT:KohanaのでHMVCを理解する 興味深い読み取り: http://techportal.inviqa.com/2010/02/22/scaling-web-applications-with-hmvc/

答えて

-1

あなたがnews/<id>を使用してニュースを表示しているので、おそらく親コントローラは、ニュースのIDを知っています。それで、あなたのモデルからニュースタイトルを入手してください。それはそれを行う適切な方法でしょう。サブリクエストからいくつかのデータを抽出しようとすると、アプリケーションがより強固に結合され、長期的に維持することが難しくなります。

+1

しかし、私はニュースを「ウィジェット」と見ています。もし私がnewsreadonコントローラがモデルにアクセスできるようにすれば、モデルにアクセスするコントローラは2つあり、ワーストケースの場合は適切なキャッシュがないとデータベースがあります。これは私にとって余分なカップリングのように聞こえる。 – mauserrifle

+0

@mauserrifle、私は同じモデルに2度アクセスするアプリケーションについては心配しません。簡単に最適化できるからです(あなたが言ったように、キャッシュすることができます)。しかし、要求またはコントローラ間の双方向の依存関係は、明らかな方法で最適化することはできません。基本的には、同じデータにアクセスする必要がある2つのコントローラがあります。モデルを介してこのデータに直接アクセスし、他のコントローラが何をしているのかを推測する必要はありません。 –

+1

私はあなたの視点を理解し、私は躊躇しました。しかし、私は心配しています。なぜなら、ウィジェット/コンポーネントが他のサーバーに拡張されたとしても、サイトコントローラがこのモデルを使って直接ビジネスを行うことを望まないからです。コンポーネントからデータを取得して表示し、最終的にPOSTリクエストをコンポーネントに渡すことができます。このように、それは分離されており、ウェブサイトはコンポーネントのクライアントに過ぎません。私たちは将来的にモバイルアプリケーションを作る計画を持っています。このような分離方法で、コンポーネントはすべてのビジネスを行うことができ、ウェブサイトとモバイルアプリケーションは同じゲートウェイを使用するクライアントに過ぎません。 – mauserrifle

0

私はメインのタスクは ニュース記事を表示することですnewsreadonサイトコントローラを持っている場合は...

このコントローラの目的は、ニュース記事を表示する場合、私は理解していません追加のコントローラが必要です。おそらくNewsreadonはコントローラを拡張してニュース記事を表示します。

+0

Newsreadonは異なるウィジェット要素でウェブサイトを構築するだけです。ニュースは他のサーバーに簡単に拡大縮小できる内部リクエストとして構築されているため、ニュースを拡張してニュースを作成することはできません。それはhmvcデザインで分離する必要があります。そうでなければ、内部と外部の使用のためにHTTPプロトコルに依存するhmvc利点を利用することはできません。 – mauserrifle

+1

私はコンセプトを理解しており、あなたの状況を正しく理解していませんでした。 HTMLの単なるチャンク以外の構造化データが必要な場合は、JSONなどのデータ交換フォーマットの使用を検討してください。 – badsyntax

+0

これが唯一の解決策であるのではないかと心配しました。私はそれを "タイトル"と "html"として構築するかもしれないと思う。 jsonデータを返すだけで(HTMLマークアップなし)、サイト内でhtmlを作成する必要がありますが、これはコンポーネント内に完全に収まります – mauserrifle

関連する問題