Разработка схемы URL MVC для иерархической системы - PullRequest
4 голосов
/ 13 ноября 2009

Итак, представьте, что я создаю многопользовательскую систему Dungeon с использованием веб-приложения MVC. Чтобы описать области, которые игрок может исследовать, система может содержать несколько карт, которые будут состоять из комнат и дверей, где двери соединяют две комнаты. Рассмотрим авторскую часть системы. Создать карту очень просто - мне нужны такие URL, как:

/Author/Maps              (an index of my maps)
/Author/Maps/Create       (a new Map)
/Author/Maps/Detail/3     (show Map details)
/Author/Maps/Edit/3       (edit map details)

Использование схемы маршрутизации: / Author / {controller} / {action} / {ID}

Мне нужно помочь с URL-адресами комнат. При создании новой комнаты мне нужно знать, для какой карты я ее создаю.

/Author/Rooms/CreateIn/[mapID] ?

А затем для редактирования деталей комнаты:

/Author/Rooms/Edit/[roomID]
/Author/Rooms/Detail/[roomID]

Будет ли работать эта схема маршрутизации? И должно ли представление, в котором перечислены все комнаты для карты, быть действием «Индекс» на контроллере комнат с переданным MapID или действием «Комнаты» на контроллере карты?

Спасибо.

1 Ответ

5 голосов
/ 13 ноября 2009

Я не знаю, является ли это наилучшей практикой, но я бы сделал это так:

Добавить новый маршрут: /Author/Maps/{mapID}/Rooms/{action}/{roomID}

Поскольку это маршрут, который я ожидал бы использовать только для RoomsController, у меня не было бы параметра {controller} на этом маршруте. Просто установите контроллер на «Комнаты» в объекте маршрута по умолчанию.

Тогда все действия в вашем RoomsController будут знать, с какой картой они работают.

Действие Index по умолчанию для RoomsController может быть списком всех комнат для указанной карты.

Действие Create будет выглядеть как Create(int mapID), а действие Details будет выглядеть как Details(int mapID, int roomID)

Редактировать: в отношении недействительных URL-адресов с несовпадающим mapID и roomID, вы можете просто проигнорировать mapID, но я думаю, что лучше будет проверить правильность указанного mapID и показать сообщение об ошибке, если это не так.

Редактировать 2: (дополнительные мысли относительно связи между mapID и roomID) Вы можете просто сделать roomID уникальным на данной карте. Следовательно, карта 5, комната 3 будет отличаться от карты 8, комната 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...