2

私は、ログインフォームのようなものが必要なときにビューでデザインしてページを作成したPHPのバックグラウンドから来て、MVCにかなり慣れていません。login というファイルがあります。これは、別のタイプのユーザーにログインするために新しいログインフォームが必要な場合にのみひどいものでした. 管理人と言います。次に、login-admin.php などと呼ばれる新しいページを作成する必要があります。

最近、私は MVC、特にフレームワークについて調べ始めましたが、私が抱えている最大の問題は、コントローラーをどのように正確に作成するかを決定することです。ビュー ファイル ルートごとに 1 つのコントローラーを使用するか、ドメイン オブジェクトに基づいてコントローラーを取得するように言われました。

ユーザーコントローラーと、ユーザー/追加、ユーザー/編集、ユーザー/削除、ユーザー/プロファイルなど、そのオブジェクトを操作するための多くのメソッドを使用できることを理解しています。しかし、この例では、「ドメイン オブジェクト」内に収まるとは限らないビューが必要になると、それらをどこに貼り付けるかを決定するのが難しいようです。

では、コントローラーを決定する際のベストプラクティスは何ですか???

4

4 に答える 4

3

「関心のある領域」ごとに 1 つのコントローラーを使用します。これは一種の恣意的なものであり、通常、複数のオブジェクトを含む、ドメイン モデルに基づいたやや大きなカテゴリです。

言い換えれば、ドメイン モデルで、関心のある領域の 1 つとしてセキュリティがあるとしましょう。多くのビューと多くのドメイン オブジェクトが含まれる可能性がありますが、セキュリティ関連のすべてのアクションを処理する単一のコントローラーにします。

于 2008-10-08T22:09:36.393 に答える
2

Ruby on Rails (およびその他の MVC Web フレームワーク) では、コントローラーはある種のルーティング構成を介して URL にマップされます。

たとえば、 /mysection/view/2 は通常 , , にマッピングされcontroller = mysectionますmethod = view( id = 2Rails では、./config/routes.rb: ではデフォルトのマッピングですmap.connect ':controller/:action/:id') 。

「ユーザーコントローラーと、ユーザー/追加、ユーザー/編集、ユーザー/削除、ユーザー/プロファイルなど、そのオブジェクトを操作するための多くのメソッドがある」と言うとき、モデルを意味していると思います-したがって、 UserModel.create があります()、UserModel.find() など。コントローラーはモデルを使用してデータを編集します。実際のコントローラーには、モデルを呼び出す数行のコード (たとえば@myuser = User.find(id)) と、URL にマップされるいくつかのメソッドのみが必要です。 (言う/usercontroller/new、、、/usercontroller/edit/usercontroller/view

この説明はかなり Rails 固有のものでしたが、ほとんどの PHP フレームワークはかなり似ています。CodeIgniter がほぼ同じレイアウトを使用していることは知っています。

于 2008-10-08T22:17:12.417 に答える
1

コントローラーを作成するときは、コントローラーが URL にマッピングされるため、通常、ユーザーに表示されるものと、ユーザーが直感的に理解できるものについて考えます。

あなたの例では、あなたが言ったように、すべてのユーザー関連のページを /user/edit、/user/profile などの形式にすることは理にかなっています。ただし、私があなただったら、管理者用に別のログイン ページを用意せず、同じログイン ビューを使用して、別の場所で管理者を処理します。

要するに、一般的に、ユーザーがサイトを使用するときに念頭に置いている主要な概念ごとにコントローラーを作成します。したがって、サイトのユーザーが友達を追加/削除できる場合、それは (ユーザーの概念の一部ではなく) それ自体の概念と考えます。したがって、友達/追加、友達/リスト、友達/削除などの機能を備えた友達コントローラーがあります。

于 2008-10-08T22:39:10.250 に答える
0

コントローラーは、呼び出しがトリガーされるコードのセクションに似ています。適切にカプセル化されたコードでは、モデルを変更するメソッドがモデルの近く (同じドメイン オブジェクト内) に存在します。ただし、呼び出しポイントは分離されています (同じドメイン オブジェクトの一部ではありません)。

ストラットなどの一部のフレームワークは、(xml を使用して) 構成可能なコントローラーを提供します。汎用コントローラが最上位のデリゲータとして機能するフロント コントローラの概念もあります。このフロントコントローラーを使用して、単純なマッピングを処理できます (厳密にはドメインを処理するわけではありません)。

于 2008-10-08T22:17:19.250 に答える