私は通常、機能の論理グループごとに1つのコントローラーを持っています。多くの場合、これはモデルごとに1つのコントローラーに対応しますが、そうでない場合もあります。
カテゴリのリストを表示する単純なオンラインカタログを作成していると想像してください。ユーザーがカテゴリを選択すると、そのカテゴリの製品のリストと、CRUD
カテゴリおよび製品の操作用の管理パネルが表示されます。2つのモデル(CategoryModel
とProductModel
)があります。フロントエンドのカテゴリリストを生成するコントローラーと、製品リストを生成する別のコントローラー(例CategoryController
とProductController
)があります。次に、バックエンドにカテゴリと製品のコントローラーがあります(AdminCategoryController
およびAdminProductController
)。2つのバックエンドコントローラーは、それぞれのモデルのリスト/追加/編集/削除/表示操作を処理します。URL構造を考えて、関連する関数を関連するURLに配置すると、コントローラー構造はURL構造と一致することがよくあります。実際、一部のフレームワーク(CodeIgniterなど)は、デフォルトの動作としてコントローラーの名前に基づいてリクエストをルーティングします。
コントローラーに何が入るかについては、モデルはデータアクセス用であり、データベース構造をラップして非表示にするという考えで作業します。「ステータスが「完了」に設定されているときに、現在の時刻をcompletion_dateに割り当てる」などのロジックは、最適なモデルです。
ビューには、プレゼンテーション全体が含まれます。コントローラ/モデルはHTMLを生成または処理するべきではありません。2列または3列などの決定はビューに属します。ビューのロジックは、表示可能な出力を生成するために必要なロジックに制限する必要があります。ビューからデータベースにクエリを実行したい場合は、ビューにロジックを入れすぎている可能性があります。
コントローラーは残っているもののためのものです。通常、これは、入力の検証、モデルへのフォームデータの割り当て、適切なビューの選択、およびリクエストの処理に必要なモデルのインスタンス化を意味します。