【问题标题】:MVC site architecture on how to set up controllers关于如何设置控制器的 MVC 站点架构
【发布时间】:2023-03-07 15:35:01
【问题描述】:

我想获得一些关于如何为新站点设置控制器的建议。

此站点将在各个位置设有图书馆,每个图书馆都可以拥有一套书籍。

URL 结构如下所示:

/图书馆名称/书籍/书籍名称

书籍也可能有类别或体裁:

/图书馆名称/类别/书籍/书籍名称

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

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

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

谢谢, 罗比

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    如果您使用多个物理上独立的库,

    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() };
        }
    

    【讨论】:

    • 谢谢,很好的回答 - 我需要一个图书控制器吗?
    • 嗯...我会先忘记所有关于 MVC 的事情,然后想想你的基本实体关系(图书馆>BooksInLibaries>书籍......等等......等等。)这可能会决定你是否想要多个控制器,一切都会变得更加清晰。上面的实际书籍方法返回的内容取决于您的需要,但可能只是参考(即 ID),然后您可以在指向实际书籍的链接中使用它。然后,该链接将解析为书籍控制器和 GetBook 方法,您可以在其中显示完整的书籍信息(然后是您的单一唯一记录)。
    【解决方案2】:

    查看Areas

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

    【讨论】:

    • 我认为对于嵌套类别,区域会太复杂。因为Area 创建不同的控制器和其他文件夹工具。所以,为什么不只是欺骗路线。并在路由中实现一些东西
    • @DotNetDreamer 虽然它可能是一个通用库应用程序,但我不知道他想如何构建它,所以我给了他一些通用指针,当他决定设计时可以使用它们.
    • 很高兴知道,但不能帮助我弄清楚我需要什么控制器
    【解决方案3】:

    您想要显示书籍,所以在我看来,您需要 BookController 而不是 LibraryController。 BookController 根据作为参数传递给 BookController 的图书馆和/或类别来获取特定书籍(或书籍列表)。

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

    【讨论】:

    • 有道理,虽然我还需要显示和搜索库,所以我倾向于两个控制器
    猜你喜欢
    • 2013-05-14
    • 2012-08-02
    • 2011-01-28
    • 2013-12-28
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    相关资源
    最近更新 更多