私はかなり大きなサイトを持っており、それを管理するための最も時間効率の良い方法を探しています (私は唯一のコーダーです)。
すべてのコードを整理するために、非常に単純な MVC 構造 (フレームワークを使用したくない) を考案しようとしています。
巨大なサイトの場合、すべてのページを処理するためにコントローラーを 1 つだけ持つ方が良いですか、それともページを分割した方が良くて簡単ですか?
非フレームワーク コントローラーの良い例を 1 つだけ挙げるとしたら、それは何ですか?
私はかなり大きなサイトを持っており、それを管理するための最も時間効率の良い方法を探しています (私は唯一のコーダーです)。
すべてのコードを整理するために、非常に単純な MVC 構造 (フレームワークを使用したくない) を考案しようとしています。
巨大なサイトの場合、すべてのページを処理するためにコントローラーを 1 つだけ持つ方が良いですか、それともページを分割した方が良くて簡単ですか?
非フレームワーク コントローラーの良い例を 1 つだけ挙げるとしたら、それは何ですか?
論理的な分割を異なるコントローラーに分割します-それがすべて静的ページである場合は、すべて同じ「静的ページ」コントローラーで提供します。
静的ページ、FAQページ(またはセクション)、製品リストがある場合は、セクションごとにコントローラーを使用してください。したがって、静的ページは1つのコントローラーによってフラットファイルまたはデータベースからプルされ、FAQページは別のコントローラーによってFAQテーブルから生成され、製品と情報はそのソースが何であれ生成されます。
ページが生成される方法やデータにアクセスする方法ごとに、別のコントローラーを使用してください。
もちろん、クラスの継承を使用して、任意のコントローラーに必要なコードで基本クラスを作成できます。
フレームワーク以外のコントローラーが何を意味するのかわからない-Zend(gasp)の「フレームワーク」、MVCパターン、さらにはコントローラー自体も、他のフレームワークとは別に使用できることを確認します。
私は、サイト/アプリケーションの特定のセクションに対する責任に基づいて、コントローラーを分割する傾向があります。これにより、コードの保守が非常に簡単になります。さらに、コントローラー(およびビュー、モデル)をモジュール(フォルダー)内にグループ化します。これが私が取り組んでいる現在のプロジェクトの例です:
サイトが複雑になるほど、使用するモジュールが増えます。私のモジュールのほとんどには「インデックス」コントローラーが1つしか含まれていませんが、それらが提供する構成は気に入っています。
次に、RESTスタイルのURIを適切なモジュール/コントローラー/アクションにマップするルーター(フロントコントローラー)を使用します。例:mysite.com/blog/posts/view/7は、「blog」モジュールからController_Posts :: view(7)を呼び出します。モジュールを使用することの追加の利点は、モジュールがない場合よりも具体的なURIを使用できることです。カスタムルートの定義をサポートするルーターを使用することで解決できると思いますが、あまり好きではありません。
他の多くのことと同様に、それはあなたが開発者として快適であることに要約されますが、あなたが物事を過度に複雑にしない限り、あなたが持っている組織が多ければ多いほど、あなたはより良いことになると私たちはおそらく同意できます。
簡単に言うと、フレームワークの使用を検討することをお勧めします。私もそれらを避けたので、あなたがすでにそこにあるものの1つを使いたくないかどうか私は理解します。私は自分自身を書くことになりましたが、これは過去1年間非常に役立ちました。それは素晴らしい学習体験であり、私が欲しい/必要なものだけが含まれています。そうは言っても、KohanaとCakePHPを調べたいと思うかもしれません-それらは過度に肥大化したIMOではなく、自分で作成しないことにした場合は間違いなく時間を節約できます。
通常、人々はコントローラーを特定の機能領域に焦点を合わせたコントローラーに分割します。
次に、すべての前に「フロントコントローラー」を配置するため、アプリケーションへのエントリポイントは1つだけです。フロントコントローラーの唯一の仕事は、着信要求を適切なコントローラーにルーティングすることです。
Zend_Controllerコンポーネントの設定方法を見てください。必要なものがすべて揃っている可能性があり、完全なZendFrameworkを購入しなくても自由に使用できます。
1つのルーター/ディスパッチャー、多くのコントローラーが私のアドバイスです。コントローラーはURLにマップする必要があります。つまり、機能が異なります。コントローラーはさまざまなサービスと連携して各ユースケースを実現するため、アプリに少数のユースケースが存在する場合、アプリ全体で1つのコントローラーが扱いにくくなります。
他の部分がどのように機能するかによって異なります。モデル ファイルが 1 つしかない場合は、おそらくコントローラーを分割する価値はありません。モデルをセクションとコントローラーに分割できる場合は、それを行います。
ただし、モデル間の重複が多すぎて分離できないことがよくあります。記事のモデルがあるかもしれませんが、上位 20 件の記事を他のページのサイドバーに表示したい場合は、そのコードを記事モデルに含める必要があります。すべてのページでそれが必要になります。
正直なところ、それを行う唯一の方法は、実際に試してみることです。単一のエントリ ポイントから始めて、扱いにくい場合は、小さなチャンクにリファクタリングします。