代码之家  ›  专栏  ›  技术社区  ›  GC.

分层系统的MVC URL方案设计

  •  4
  • GC.  · 技术社区  · 15 年前

    假设我正在使用MVC Web应用程序构建一个多用户地牢系统。为了描述玩家可以探索的区域,系统可以包含许多地图,其中包括房间和门-门连接两个房间。 考虑系统的创作部分。创建地图很容易-我需要如下网址:

    /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)
    

    使用路由方案:/作者/控制器/操作/ID

    这是我需要帮助的房间的URL。创建新房间时,我需要知道要为哪个地图创建房间。

    /Author/Rooms/CreateIn/[mapID] ?
    

    然后编辑房间的详细信息:

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

    这个路由方案有效吗?并且,列出地图的所有房间的视图应该是房间控制器上的“索引”操作,传入了mapid,还是地图控制器上的“房间”操作?

    谢谢。

    1 回复  |  直到 12 年前
        1
  •  5
  •   CoderDennis    12 年前

    我不知道这是否是最佳实践,但我会这样做:

    添加新路由: /Author/Maps/{mapID}/Rooms/{action}/{roomID}

    因为这是一条我只希望用于客房管理员的路线,所以我没有 {controller} 该路由中的参数。只需在路由的默认对象中将控制器设置为“房间”。

    然后你房间里的所有动作控制器就会知道他们在使用哪个地图。

    RoomsController的默认索引操作可以是指定映射的所有房间的列表。

    创建操作如下 Create(int mapID) 细节动作看起来像 Details(int mapID, int roomID)

    编辑: 对于具有不匹配的mapid和roomid的无效URL,您可以忽略mapid,但我认为更好的过程是验证指定的mapid是否正确,如果不正确,则显示错误消息。

    编辑2: (关于mapid和roomid关系的其他思考) 您可以在给定的地图中使roomid唯一。因此,地图5、3号房间与地图8、3号房间不同。