在ASP.NET MVC3中设计控制器的正确方法

时间:2011-07-25 16:17:35

标签: model-view-controller asp.net-mvc-3

我有一个问题。昨天我开始学习ASP.NET MVC3,我创建了一个博客,我可以添加,编辑,删除帖子和评论这些帖子。

但我觉得我想以不同的方式设计它,因为我认为我做错了。

我有两个控制器。 HomeController和BlogController,我认为这是非常错误的,因为我没有/添加Blog,我添加了帖子/评论。此外,我希望我的网站不仅包括博客本身。

我想在这个场景中做些什么

/Controllers
   HomeController.cs
   /Blog
      PostController.cs /* IndexAction - Show list of entries; DetailsAction - Show only one entry with comments under */
      CommentController.cs /* ListAction - Lists comments (not sure how to list them in Blog controller with PartialView yet...); AddAction - Add comment within Details of Post (again not sure if I can do this) */
   /SomeOtherThing
      SomeOtherController.cs /* Some random data from database like greeting in index page or whatever else not related to blog in any way */
   /Admin
      BlogController.cs /* For edit/delete blog data like comments/posts */
      SomeOtherController.cs /* For editing the other thing, not sure what for now */
      AccountsController.cs /* For editing accounts and such... */

我认为我希望我的控制器层次结构看起来像这样,但我不确定这是否是正确的方法。我宁愿开始学习正确的方法,然后在我的第一个项目上做错了,然后重新学习如何正确地做到这一点。

另外,关于那些评论,在单独的控制器中制作它们是个好主意吗?因为我想在Post动作中添加/显示。例如,localhost/blog/post/1将显示帖子+表单以添加评论+评论列表。但我不知道怎么做但是.. :)

2 个答案:

答案 0 :(得分:1)

当存在少量控制器时,将所有控制器保留在一个文件夹中。如果您愿意,可以通过在global.asax文件中指定路由来“模拟”层次结构。请参阅this

当您预见网站中有大量控制器时,请使用“区域”。区域提供了将大型MVC Web应用程序分成较小功能组的方法。区域实际上是应用程序内的MVC结构。另请参阅here

答案 1 :(得分:0)

当处理具有易于管理的控制器数量的项目时,我通常将它们全部留在根控制器文件夹中。我参与的团队通常会让项目的规模和/或复杂性决定我们是否需要创建“控制器层次结构”。也就是说,如果您发现使用您定义的层次结构概念化项目更容易,那就去做吧。

我同意你的想法,将评论移到他们自己的独立控制器中,因为它们是一个可以在“博客文章”之外设计和测试的独立实体。