关于如何设置控制器的MVC站点架构

时间:2013-04-29 11:03:15

标签: asp.net asp.net-mvc

我想就如何为新网站设置控制器提出一些建议。

该网站将在各个地点设立图书馆,每个图书馆都可以有一套图书。

网址结构如下所示:

/库的名称/书籍/预订-名称

书籍也可能有类别或类型:

/库的名称/分类/书籍/书本名称

我的问题是,我是否只创建了一个库控制器,其中包含添加/删除库以及添加和删除书籍的所有逻辑?

或者我是否创建了库控制器和书籍控制器?如果是这样,我如何确保书籍与特定图书馆“绑定”?

很抱歉这个简单的问题,但没有一个主要的教程似乎有这样的嵌套路线。

谢谢, 罗比

3 个答案:

答案 0 :(得分:2)

结帐Areas

如果要在多个控制器中重复编写代码,请考虑为该代码创建单独的类和方法,以便遵循DRY原则。

答案 1 :(得分:2)

如果您使用多个物理上独立的库,LibraryName(可能)有意义(但会弹出一些明显的位置问题)?

请注意,您可能会开始使用此方法点击路由地狱,但这并非不可能,因此我首先要研究并定义您的结构。

使用以下URI结构可能会更好:

/libraries/{LibraryName}/books/

获取libraryName

中的图书清单
/libraries/{LibraryName}/books/{BookISBN}

根据它的ISBN编号获取一本书

/libraries/{LibraryName}/books?category=somecategory

获取某个类别的图书清单

使用示例路由:

    routes.MapRoute(
        name: "LibraryBooks",
        url: "libraries/{id}/books",
        defaults: new { controller = "Libraries", action = "GetBooks" }
    );

它在LibrariesController中的方法:

    public IEnumerable<IBook> GetBooks(string id)
    {
        return new IBook[] { new Book(), new Book() };
    }

答案 2 :(得分:0)

您想要显示书籍,因此我认为您需要BookController而不是LibraryController。 BookController基于作为参数传递给BookController的库和/或类别来获取特定书籍(或书籍列表)。

如果要正确设置(划分UI,业务逻辑,数据访问),则应将检索数据的逻辑放在单独的类库中