6

私は現在、PHPを使用するときに選択するフレームワークとしてCodeIgniterを使用しています。私が取り組んでいることの1つは、「ページ」のアイデアと、MVC内でそれを適切に表現する方法です。私の知る限り、CodeIgniterにはページコントローラーに委任するフロントコントローラーがあります。私の思考プロセスでは、各ページに独自のコントローラーがあります。多くのメソッドが詰め込まれたページコントローラを使用している人を見かけますが、あまりにも頻繁に見られます。その意味で、各アクションは独自のページになります。

一度に1つまたは2つのメソッドしか必要としない場合、オーバーヘッドが多すぎるように思われるため、1つのコントローラーに多くのメソッドを詰め込むというアイデアは本当に好きではありませんでした。各ページに独自のコントローラーを設定する方が合理的であり、アクションはその特定のページで実行できる操作にのみ対応します。私はこれを間違った方法で考えていますか?

さらに混乱させるのは、一部のWebアプリケーションでは、複数のメソッド(つまり、ログイン、登録、表示、編集など)を持つ1つのコントローラーがありますが、実際にはログインコントローラーがあることに気付くでしょう。とレジスタコントローラ。「ページコントローラ」の適切な使用法は何ですか?

4

3 に答える 3

7

ドメインの観点からは、ドメイン コンテキストごとに 1 つのコントローラーを使用する方が理にかなっていると断言できます。必ずしも 1 ページに 1 つではありませんが、コンテキストによってはそうなる場合もあります。コンテキストとは、「密接に関連するアクション」のことです。

たとえば、アカウント コントローラーは、ログイン、登録、ログアウト、パスワードの変更、アクションを処理する必要があります。それらはすべて「アカウント」のコンテキスト内に存在します

たとえば、Stackoverflow を見てみましょう。DisplayQuestion、AskQuestion、Delete Question、MostRecent Questions などのアクションを持つ「Questions」コントローラーがあります。それらはすべて、1 つのコントローラーによって管理される異なる「ビュー/ページ」です。

于 2009-04-17T17:59:57.103 に答える
1

コントローラー内のすべてのパブリック メソッドが「ページ」になるという点では、そのとおりです。とはいえ、必ずしも Web ページであるとは限りません。アクションはデータの投稿であり、別のアクション/ページにリダイレクトされる可能性があるため、ページは必ずしも「Web ページ」を意味するわけではありません。

MVC は、物事を機能させるために多くの規則を使用します。たとえば、すべてのコントローラーは「Controller」で終わる必要があります。したがって、一連のユーザー ページ (作成、編集、削除など) は UserController に含まれます。Views フォルダーでは、コントローラー クラス内の各パブリック メソッドまたはアクションは、コントローラーのプレフィックスと一致するフォルダー (この場合はユーザー フォルダー) 内の Web ページになります。したがって、コントローラー クラス内の「削除」というアクションは、ユーザー フォルダー内の Delete.aspx ページを指します。

これらすべてのメソッドを 1 つのクラスに入れるのは少し厄介に思えますが、オブジェクトに基づいて同様の機能を整理するのはうまくいきます。

于 2009-04-17T18:01:16.710 に答える
1

MVC では、「ページ」は 3 つをまとめたときに得られるものです。モデルはデータ層を処理し、ビューはユーザーに表示される実際の HTML を処理し、コントローラーは目的のデータを表示するためにどのように連携するかを決定します。別のコントローラーを使用するか、既存のコントローラーに別の方法を使用するかについての私の選択は、私が持っている他のコントローラーに操作がどれだけ近いかにかかっています。ユーザーの追加、ユーザーの削除、パスワードの変更などを処理する可能性が最も高い UserAdmin コントローラーが必要だとします。何らかの方法でユーザーのアカウントの変更を処理する機能を追加する場合は、おそらくそれを配置しますそこで。それらを独自のコントローラーに分離した場合、当然別のコントローラーを追加します。コントローラーを使用すると、同様のタスクをまとめて収容できるため、既に行われたことを再作成するのではなく、クラスに既にあるものを活用できます。その多くは、プログラマーがそれを行うべきだと考える方法です。あなたにとって意味のあることは、私にとっては意味をなさないかもしれません。それは、開発者 (またはデザイナー) の選択です。

于 2009-04-17T18:44:43.550 に答える