5

すべてがモジュールであるMVCを構築しています。これにより、フォーラムやユーザーモジュールなどのオブジェクトのコレクションを分離して、MVCをさらに整理できるようになります。

/blog
    /controller
    /model
    /view
/user
    /controller
    /model
    /view
/forum
    /controller
    /model
    /view

私は現在、クラスを含むようforum/edit/34なもののルートをマップしています。(これは、すべてのアクションがコントローラーのメソッドである標準的なアプローチとは少し異なります)。これにより、コントローラーの個々の「アクション」をすべて独自のファイルに分割できるため、10個の異なるアクションで大規模なコントローラーを管理する必要がなくなります。/forum/controller/edit.phpForum_Controller_EditForum_Controller::edit()

とにかく、ここに問題があります。モジュールに新しいコントローラーを追加したいとします。たとえば、フォーラムのトピック(forum/topic/view/34)が必要だとします。新しい「トピック」モジュールを作成できます。

/forum
    /controller
    /model
    /view
/topic
    /controller
    /model
    /view

ただし、1)/topic/view/の代わりにURLを使用する必要がありますforum/topic/view。2)関連するコンポーネントを分離します(トピックはフォーラムモジュールの一部である必要があります)。3)一般的な「トピック」を作成できなくなります。必要に応じて、コンテンツノードなどのモジュール。

では、各モジュールで複数のコントローラー(複数のアクションを含む)を許可しながら、モジュラーMVCを構築するにはどうすればよいですか?

Kohana Frameworkは、この問題を解決するためにHMVCを実装することを決定しました。ただし、その結果、ロードするファイルの正しい場所を見つけるために多くのis_file()チェックが行われます。I / Oチェックはコモディティハードウェアでは非常に貴重であるため、そのオプションとは考えていません。また、クラスのどのバージョンがロードされているかが明確でないため、同じ名前の複数のクラスを操作するときに混乱が生じる可能性があります。

パスを事前に設定したり、適切なクラスのフォルダーをチェックしたりすることなく、この問題の解決策を見つけたいと思います。それでも、私が調べた最後の20のフレームワークのうち、この普遍的な問題に対する良い答えはないようです。誰かアイデアがありますか?

ルーティングアップデート

ルーティングを実装する場合、どのように機能しますか?最初の(/ forum)、2番目の(/ forum / view)、および3番目のレベル(/ forum / topic / view)をどのように処理しますか?私のルートは、パラメーターを使用して、第3レベルのルートと第2レベルのルートの違いをどのように知ることができますか?言い換えれば、私のシステムはこれらのどれをしようとしますか?(URI「フォーラム/トピック/ビュー/ 34」を指定)

$controller = new \Forum\Controller\Topic\View;
$controller->action('34');

// or
$controller = new \Forum\Controller\Topic;
$controller->view('34');

// or
$controller = new \Forum\Controller;
$controller->topic('view', '34')

ルーティングアップデート2

カイルズのアドバイスを受けて、私はすべてのコントローラーにルートセットが必要であると判断しました。これにより、URLパス「forum / topic / view/34」ルートより上のクラスのどれも定義できるようになります。結局のところ、すべてのURLは重要であり、配置しているファイルシステム構造に基づくべきではありません。彼は、URLのデザインは私たちがよく言うよりも注目に値すると言っているのは正しいと思います。

4

2 に答える 2

4

パスの事前設定を伴わないこの問題の解決策を見つけたいと思います

これはルーティングと呼ばれ、それ解決策です。

私が調べた最後の20のフレームワークのうち、この普遍的な問題に対する良い答えはないようです。

ユニバーサルソリューションはルーティングです。

それがまさにフレームワークがそれを採用している理由です。ルーティングは、URIに柔軟性を持たせながら、アーキテクチャを維持する方法です。そうしないと、URIの命名は常にMVCレイアウトに準拠する必要があります。

于 2011-05-10T15:21:59.000 に答える
0

「スピード」に関心がありすぎるかもしれません。フレームワークは、開発をスピードアップし、アイデアをすばやくテーブルに出すことを目的としています。

Webサイトが開発されて公開されると、人気が出た場合、開発者はパフォーマンスを向上させるためにボトルネックの修正を試みることができます。WebサイトがディスクI/Oのボトルネックを修正する必要があるポイントに到達することはめったにありませんが、ほとんどのフレームワークには、ファイルに静的にルートを定義するという単純なソリューションがあります。

おそらく、ルーティングの新しい方法を発明しようとする代わりに、フレームワークを使用している誰かにとって問題になったときにのみ、このボトルネックを簡単に解決するのに役立つツールを利用できるようにする必要があります。

2つの可能な解決策は次のとおりです。

  1. ルートをメモリまたはデータベーステーブルに動的にキャッシュします。
  2. ファイルで静的にルートを定義します(これはあなたがしたくないことだと私は知っています)。
于 2011-05-10T15:52:15.873 に答える