2016-10-12 5 views
1

Это гипотетический вопрос, позволяет сказать, у меня есть очень простой форумMVC Entity разделение лучшей практики

У меня есть следующие объекты (объекты)

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

Когда я хочу получить конкретный поток или список потоков, я попал в ThreadsController.

Когда я хочу получать сообщения для конкретного потока, я попал в PostsController

Вопрос:

Если я хочу, чтобы получить список потоков, которые пользователь создал, какой из следующий будет лучший подход:

  1. Создать новый контроллер - UserThreadsController, который возвращает список объектов Thread

  2. Создать дополнительный метод действия на ThreadsController, т.е. GetByUser

  3. Создать дополнительный метод действия на UserController, т.е. GetThreads

Благодарности

+0

Можете ли вы разместить свои модели? У 'Threads' есть свойство внешнего ключа, которое связывается с полем' ID' таблицы 'User'? –

+0

Вопрос не в том, как я могу получить данные, это мне вполне комфортно. Вопрос в том, как структурировать контроллеры? – pieperu

ответ

2

Это, скорее всего, будет закрыт, как упрямый, так как, ну, это так. Мое личное мнение заключается в том, что у вас уже слишком много разлуки.

Не должно быть 1-1 корреляции между объектами и контроллерами. На самом деле, как правило, лучше держать контроллеры немного более высокоуровневыми, чем это, инкапсулируя концепции, а не только одну вещь. Например, у вас может быть только ForumController, с действиями для перечисления всех потоков и для показа одного потока. По крайней мере, на каждом форуме, с которым я столкнулся, отдельные сообщения никогда не отображаются сами по себе, поэтому вам даже не нужны действия для них.

Показаны темы для пользователя - это немного тоссе. Имеет смысл иметь что-то подобное на UserController, но также имеет смысл иметь все связанные с форумом вещи в ForumController. Я думаю, вы могли бы разумно пойти в любом случае.

+0

Спасибо за ваш вход Крис. Очень признателен. Это противоречит другому совету (или, скорее, другому мнению), которое я получил, у которого было много контроллеров с несколькими действиями, в отличие от нескольких контроллеров со многими действиями. Не могли бы вы дать такое же мнение, если бы это была служба REST вместо приложения ASP.Net MVC? Еще раз спасибо – pieperu

+1

Всё зависит. В MVC, картина, высказывание идет «тощие контроллеры, толстые модели».Тем не менее, в MVC, структура, нет истинной Модели, и контроллеры, как правило, должны делать немного более тяжелый подъем, чем в структуре, которая более строго придерживается шаблона MVC. Я не обязательно выступаю за контроллеры с тысячами строк кода, но мы действительно об этом не говорим. Даже полный базовый форум, вероятно, будет включать только 6-8 действий, и вы можете отбросить большую часть реального кода для этих действий в классы полезности. –

+0

Интересно. Это имеет смысл, так как большинство моих действий с контроллером - это один лайнер, завернутый в попытку поймать в любом случае (один лайнер переходит к сервису для обработки тяжелого подъема). Последний вопрос, который я обещаю. Итак, чтобы следовать типичному соглашению REST (GET/POST/PUT/DELETE), вы сказали бы, что было наоборот? Я знаю, что WebApi и Asp.Net MVC похожи в архитектуре (MVC), но это соглашение меня отбрасывает. Еще раз спасибо за ваш ввод – pieperu