4

MVC Web アプリケーションを使用してマルチ ユーザー ダンジョン システムを構築しているとします。プレイヤーが探索できるエリアを説明するために、システムには、部屋とドア (ドアが 2 つの部屋を接続する場所) で構成される多数のマップを含めることができます。システムのオーサリング部分について考えてみましょう。マップの作成は簡単です。次のような URL が必要です。

/Author/Maps (私の地図のインデックス)
/Author/Maps/Create (新しいマップ)
/Author/Maps/Detail/3 (マップの詳細を表示)
/Author/Maps/Edit/3 (マップの詳細を編集)

ルーティング スキームの使用: /Author/{controller}/{action}/{ID}

助けが必要なのはルームの URL です。新しいルームを作成するときは、作成対象のマップを知る必要があります。

/Author/Rooms/CreateIn/[マップID] ?

次に、部屋の詳細を編集します。

/作成者/部屋/編集/[部屋ID]
/著者/部屋/詳細/[部屋ID]

このルーティング スキームは機能しますか? また、マップのすべてのルームを一覧表示するビューは、MapID が渡されたルーム コントローラーの「インデックス」アクションにする必要がありますか、それともマップ コントローラーの「ルーム」アクションにする必要がありますか?

ありがとう。

4

1 に答える 1

5

これがベストプラクティスかどうかはわかりませんが、次のようにします。

新しいルートを追加します。/Author/Maps/{mapID}/Rooms/{action}/{roomID}

これは、RoomsController にのみ使用することを期待するルートであるため、{controller}そのルートにはパラメーターがありません。ルートのデフォルト オブジェクトでコントローラを「Rooms」に設定するだけです。

次に、RoomsController 内のすべてのアクションが、どのマップを操作しているかを認識します。

RoomsController のデフォルトの Index アクションは、指定されたマップのすべての部屋のリストです。

Create アクションは次のようにCreate(int mapID)なり、Details アクションは次のようになります。Details(int mapID, int roomID)

編集: mapID と roomID が一致しない無効な URL については、mapID を無視することもできますが、指定された mapID が正しいことを検証し、そうでない場合はエラー メッセージを表示することをお勧めします。

編集 2: (mapID と roomID の関係に関する追加の考え) roomID を特定のマップ内で一意にすることができます。したがって、マップ 5 の部屋 3 は、マップ 8 の部屋 3 とは別の部屋になります。

于 2009-11-12T21:33:01.743 に答える