MVC实体分离最佳实践

时间:2016-10-12 14:11:46

标签: c# asp.net-mvc asp.net-mvc-controller

这是一个假设的问题,假设我有一个非常基本的论坛

我有以下实体(对象)

public class User 
{
    public Guid Id { get; set;}
    public string Username { get; set;}
}

public class Thread
{
    public Guid Id { get; set;}
    public Guid Owner { get; set;}//UserId
    public string Title { get; set; }
    public DateTime DateCreated { get; set; }
}

public class Post
{
    public Guid Id { get; set; }
    public Guid ThreadId { get; set; }
    public string Content { get; set; }
    public DateTime DatePosted { get; set; }
    public Guid PostedBy { get; set; }//UserId
}

我有以下控制器

  1. UsersController
  2. ThreadsController
  3. PostsController
  4. 当我想要检索特定线程或线程列表时,我点击了ThreadsController。

    当我想检索特定线程的帖子时,我点击了PostsController

    问题:

    如果我想检索用户创建的线程列表,那么以下哪种线程是最好的方法:

    1. 创建一个新的控制器 - UserThreadsController,它返回一个Thread对象列表

    2. 在ThreadsController上创建一个额外的操作方法,即GetByUser

    3. 在UserController上创建一个额外的操作方法,即GetThreads

    4. 由于

1 个答案:

答案 0 :(得分:2)

这可能会因为自以为是而被关闭,因为它确实如此。我个人认为你已经有太多的分离了。

实体和控制器之间不需要1-1相关。实际上,保持控制器比这更高级,通常更好,封装概念,而不仅仅是一件事。例如,您可能只有ForumController,其中包含列出所有线程的操作,以及显示单个线程的操作。至少在我遇到过的每个论坛中,个别帖子都不是自己展示的,所以你甚至不需要为这些帖子采取行动。

显示特定于用户的线程有点折腾。在UserController上使用这样的内容是有意义的,但是在ForumController中包含所有与论坛相关的内容也是有意义的。我认为你可以合理地走任何一条路。