ここ数週間、私はPHPを使ってWebアプリケーションのMVCデザインパターンを研究してきました。幅広い視点から、私はパターンがどのように動作するのか、それが小規模から大規模のあらゆる種類のWebアプリケーションを実装する非常に良い方法であることを理解しています。MVC PHP Webアプリケーションでのコントローラの作成と結合
私はそれを理解として、私たちはそうのようなコントローラを介してお互いに話3の別個の層があります。
ユーザー入力--->表示--->コントローラ--->モデル
サイト出力< ---表示< ---コントローラ< ---モデル
私の計画した実装では、私のデータベース内の各テーブルのモデルを持っていて、それぞれのモデルは管理に必要なすべての機能/ロジックこの表これらのモデルにはそれぞれ関連するビューがあります。モデルとビューにはもちろん、それらを使用できるようにするコントローラがあります。
これで、データベースを必要とする単一の論理的なアクションがカバーされているので、頭を悩むことは簡単です。しかし、特定のアクションで複数のテーブル/モデルを使用する必要がある場合はどうなりますか?
アプリケーションの管理側は、データベースを維持するために一度に複数のモデルを必要としない可能性があります。アプリケーションのフロントエンドまたはユーザー側は別の問題です!特定のセクションの記事リスト、現在ログインしているユーザーのリスト、タグクラウドなどのSOサイト統計からの例を借用したWebページがあるとします。
この1ページには、私の予定されているデザイン(記事、ユーザー、タグ)に少なくとも3つのモデルが必要です。
明らかに私の単一のコントローラはそれをカットしません。では私は何をしますか?
ウェブページ用の新しいモノリシックコントローラを作成しますか?
- ことは私は私が望む結果を取得できるよう
- コーディング重複の多くを必要とする変更が
が小さく操作する「スーパー」のコントローラを作成し、必要に応じて維持するために本当にハード
- 特定のコントローラ
- 私が望む結果を得ることができます 私は現在の方に誤るい
- は、モジュール式になりますので、ひとつのスクリプトへの変更はは、最小限のコードの重複
が
を作成し、[ここで華麗なソリューションを挿入]他人
多分それは次のようになります。
articlecontroller.php
<?php
//Article Controller Script
if($_GET['article'] = 'foo')
{
//magic necessary for displaying article "foo".
}
?>
usercontroller.php
<?php
//User Controller Script
if($_GET['user'] = 'display')
{
//magic necessary for displaying users
}
?>
supercontroller.php
ご覧のとおり、私のスーパーコントローラは、その特定のページが必要としているものを見て、必要なコントローラを備えています。 NB:コードはちょうど迅速かつ汚れた例です:)
しかし、私はプロではないので、私はあなたに尋ねています。どのオプションが優先されますか?オプション3のどちらもお勧めしませんか?どんなコードスニペット/例も可愛く、必須ではありません。
これまでに作成した場合は、お時間をいただきありがとうございます。
私はこの質問を更新すると思っていました[それを忘れてしまった - P]。私はFat Models/Skinny Controllersのコンセプトを見て、どのようにしたらいいか分かりましたので、私は確実にその方向性を取っていきます。
私は他のフレームワークのいくつかとMVCパターンをどのように達成するのかについてアドバイスを受けました。取り込むことはかなり多いです!それでも、私は道に沿ってかなり新しいことを学んだので、それは大きな利点でした。私は将来もっと多くの質問をするかもしれませんが、今は十分なスタートを切っています。
ありがとうございます。
それは非常に小さなフレームワークで、1モデル= 1テーブルは、ほとんどの部分でかなりうまく動作します。しかし、私はいくつかのモデルが複数のテーブルを必要とすることを知っているので、私はそれを完全に制限するつもりはありません。 私は自分のPHPフレームワークwww.radicore.orgを開発したTony Marstonという人物によって記事を読んでいました。彼は1 Model = 1 Tableを使用することを提唱しています。それは自分のデザインに影響を与えた彼のアイデアです。それは彼が唯一の方法だと言っているわけではありませんが、彼は非常に堅牢な枠組みを持ち、彼のものを知っている人です。 – Etzeitet
私は彼のページのいくつかの情報を読んでいます。私はあなたがモデルで彼の意図を誤解していると思います。 MVCの彼のページからの引用があります。「モデルとは、データやアクティビティを表すオブジェクトです。たとえば、データベーステーブルや工場の生産現場のプロセスなどです。 –
ああ、間違ってはいけない。私は彼が "テーブルごとに1つのモデル"に専念するのではないことを知っていますが、あなたが探検し続けるならそれは顕著に特徴的です。 いずれにせよ、私はすでに1モデル/ 1テーブルに固執するつもりはないと言いましたが、それが意味をなさないところでは私はそれを行うことに何の問題も見ません。 – Etzeitet