2009-02-27 17 views
9

ASP.NET MVCの動作が本当に好きです。私は、新しいWebプロジェクトのすべてにそれを実装したいと思っていますが、先日、プロトタイプの問題にぶつかりました。本当に良い解決策が見つからなかったので、どうやってMVCアプリケーションを設計しますか?それは典型的なRESTパターンに適合しませんか?たとえば、私が設計していたプロトタイプにはいくつかのページがありますが、ページ自体は必ずしもドメインモデルに束縛されているわけではありません。たとえば、以下のページを持っているかもしれない簡単な登録サイトを、取る:ASP.NET MVCコントローラのアクションの設計

  • /Default.aspx
  • /Register.aspx
  • 時折
  • /ThankYou.aspx

、などプログラムでは、サインアップの調整やデータのレビューなどの詳細を処理するための管理セクションが必要になる場合があります。標準のASP.NET Webアプリケーションでは、私は次の

  • /Admin/Default.aspx
  • /Admin/ListRegistrations.aspx
  • /Admin/ViewReports.aspx ...
を追加することができます

  • ホーム - >インデックス
  • 、それは例えば2つのコントローラを有するように、この場合には、MVCパターンから受け入れられない偏差だろう

  • ショッピング - >登録
  • ホーム - >ありがとう
  • 管理 - >インデックス
  • 管理 - > ListRegistrations
  • 管理 - >これで

私の欲求不満があるという事実によって悪化するレポートサブコントローラーとエリアの実際的な実装はまだありません。私はPhil Haackがまとめた "Areas"プロトタイプを知っていますが、それはあまり成熟しておらず、かなり率直に言って、私は設定方法が気に入らないのですが、どうしたらよいか分かりませんその作業を見ることもできます。

MVCと思うと、私はRESTも考えているようですが、実際のエンティティやアクションではなくページを表現するコントローラのアクションを持つことは、私には当てはまりません。どう思いますか?

答えて

3

ASP.NET WebフォームとMVCをいつでも組み合わせることができます。

ちょうどあなたのルーティングテーブルに

routes.IgnoreRoute("Pages/{*path}"); 

を追加し、アプリケーションのPagesフォルダに従来のWebフォームページを追加します。

+0

これはおそらく最適なアイデアです。私は、管理者固有のロジックを通常のWebフォームで保持しながら、MVCのものを使用するようにサイトのユーザー部分を設計することができます。私に思い出させてくれてありがとう。 – Chris

1

コントローラを必要な数だけ持つことができます。そのレイアウトは合理的に見えます。経路にはにはがありませんので、{controller}/{action}に直接マップすることはできますが、操作が簡単です。私はおそらくあなたに感謝しています - 私はおそらくあなたがビューとしてありがとうございました - 登録[GET]おそらく別のビューを使用して[POST]を登録する

+1

パターンとの混乱/不満は、機能を分離するためにネストされたフォルダを持つ典型的なシナリオについて語るときに、実際に構築を開始すると思います。たとえば、ユーザーのための製品コントローラーですが、製品を管理するためのAdmin-> Productsコントローラーです。どこ?どうやって? – Chris

3

MVCの新人は、アクションをコントローラ表示の理由から。あなたのケースでは、ホームページでRegisterとThankYouのアクションをグループ化するのではなく、MVCチームがサンプルプロジェクトで行ったようにAccountControllerにそれらを分離してみてください。ルーティングを使用して、エンドユーザー向けにURLの設定を行うことができます。

他のアクションについては、ReportControllerはどうですか?さらに、IndexControl/Viewには、ReportControllerのアクションを含むさまざまな管理アクションへのリンクが含まれているAdministrationControllerを追加することができます。

短いバージョン:サイトのナビゲーションではなく、機能別にコントローラをグループ化します。

+0

私はそれを取得しますが、ビューはどうですか?私が説明したシナリオでは、adminセクションのコントローラアクションが、userセクションのコントローラアクションとは別のマスターページを継承することが必要な場合があります。これらのビューを使用するマスターページに基づいて、この方法でビューを分離するのは、論理的な方法ではないようです。 – Chris

+0

コントローラの操作=ビュー、意味 – Chris

+0

ビュー/管理フォルダには、ビュー/レポートのビューが参照する管理マスターページがあります。私はそれを行うことで何か間違っているとは思わない - あなたは実際にプレゼンテーションテンプレートについて話している、コントローラーは知っておくべきことは何もない。 – Troy

3

私は通常、「ホーム」コントローラをプロジェクトの最初のものとして捨て、「ページ」コントローラで置き換えます。私はそのページを「ちょうど」のページに使用します。 「FAQ」、「お問い合わせ」などのようなものホームコントローラのデフォルトのアプローチでは、基本的な静的なページが必要なたびに新しいメソッドを追加する必要があるため、少なくとも部分的にこれを行います。

このコントローラーでは、私は1つのアクションしか持っていません。そのアクションは、それらのページのすべてに同じコンテキストオブジェクトを与えます。私は実際にそれらのページのコンテンツを検索 "スラッグ"でデータベースに格納し、それをNVelocityのテンプレートに結びつけますが、ファイル内の静的なHTMLまたはNVelocityテンプレートだけでも機能します。

他の人たちと同様に、管理対象の「もの」によってコントローラに分割されます。したがって、ReportController、UserまたはAccountController、CartControllerなどです。次に、アクションがはるかに理にかなっています。

登録ユーザーのリストについて話しているとき、実際にはユーザーのリストなので、UserControllerを持って、User/Display/Registered/MostRecentなどを実行します。/User/SaveRegistrationに投稿する/ User/Register /自身/ User/Register。そこから/ User/DisplayProfile/NewUserIDまたは/ Page/Display/Homeにリダイレクトすることができます。

関連する問題