【问题标题】:placment of classes in NerdDinner在书呆子晚餐中安排课程
【发布时间】:2011-07-04 23:44:48
【问题描述】:

我正在学习 ASP.NET MVC 并查看 ASP.NET MVC 示例应用程序NerdDinner

  1. “模型”文件夹包含一个名为 Dinner.cs 的类。这是主要的晚餐实体。 这堂课不应该在其他地方吗?例如“域”?而是应该将 viewmodel 类放在包含晚餐信息的 Models 文件夹中吗?

  2. 为什么文件“PaginatedList.cs”位于名为:“Helpers”的文件夹中。这个文件不应该在文件夹中:“模型”,因为它是提供给视图的?

对此的任何澄清将不胜感激!

【问题讨论】:

    标签: asp.net-mvc view model viewmodel nerddinner


    【解决方案1】:
    1. 当然,您对此的想法是正确的。 NerdDinner 仅用于概念演示目的,并没有真正假装所有最佳实践。随着您自己的项目的增长,它变得越来越明显。您将在单独的文件夹中拥有域实体/服务/存储库,然后是单独的项目,然后可能是单独的解决方案。您会发现自己将此文件夹重命名为 ViewModels,以使其对从事项目的其他人更加明显。

    2. PaginatedList 可以是 ViewModel 并包含与分页相关的数据。然后可以放到ViewModels文件夹。但我相信你在 NerdDinner 中所拥有的 - 只是一个简单的 View 助手来生成分页标记。此外,助手可能不是那么严格的“视图”或“视图模型”——它们可以包含简单的逻辑,它们在某种程度上处于视图和视图模型之间的中间:)。另请注意, PaginatedList 更多的是“框架”问题,而不是“特定解决方案”。所以你不能把它放在项目特定的东西中的“视图”或“模型”文件夹中。所以“Helpers”对于 NerdDinner 来说已经足够好了。在真正的解决方案中,您最好将其通用化,将其包含在 MVC 之上的“框架”中。

    【讨论】:

      【解决方案2】:

      对于第一个问题,Dinner.cs 文件包含 Dinner 类的一部分以及伙伴类的一些验证属性。恕我直言,将此文件放入Model 文件夹是完全理智的,因为它实际上是解决方案模型的一部分。

      对于您的第二个问题,PaginatedList 是一种数据结构,可让您一次查看数据的某个“页面”(一组固定的元素)。我真的不认为它是一个ViewModel,它就是一个“助手”。

      我想补充的另一件事是,如果您有一些 ViewModel 传递给您的视图而不是实际的模型类,或者因为您有一组特定的数据元素要传递,我认为它会是有一个单独的ViewModel 文件夹是合理的。

      希望这会有所帮助:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        相关资源
        最近更新 更多