ASP.NET MVC Контроллер дизайн - PullRequest
0 голосов
/ 25 января 2010

Давайте создадим следующую структуру:

Компания -> Отдел -> Персона

-> означает 1: отношение М

Должен ли я иметь один жирный контроллер, который обслуживает все запросы для этих объектов, или один контроллер на каждый объект?

Там будут обычные операции CRUD для каждого объекта. Детали (отдел, человек) будут отображаться на одной странице с использованием сеток.

Ответы [ 5 ]

2 голосов
/ 25 января 2010

Если это похоже на тип администратора, я бы просто использовал один контроллер или использовал динамические данные. В противном случае мне нравится разбивать свои контроллеры на основе поведения, например, бронирование номеров, управление расписанием и т. Д.

2 голосов
/ 25 января 2010

После DDD - если только компания является агрегированным корнем - тогда один (но все же тонкий ) контроллер

1 голос
/ 25 января 2010

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

  • AccountController ( для аутентификации / авторизации )
  • ContactsController ( для реального бизнес-кейса, контакты )
  • AdminController ( для суперпользователей, чтобы изменить приложение )

В моей модели данных могут быть такие таблицы, как: Пользователь, Контакт, Адрес, Телефон и т. Д.

1 голос
/ 25 января 2010

У меня будет отдельный контроллер для каждого. Если одному контроллеру (например, компании) приходится получать информацию от людей, это нормально.

Если вы действительно хотите Render Action . Это позволяет вам просматривать вызов в другом контроллере для загрузки этой части представления.

1 голос
/ 25 января 2010

Я обычно использую один контроллер для каждого объекта на CRUD ... так что один контроллер для отдела и один для человека. Почему?

У вас должен быть DTO или репозиторий для каждого. Если у вас есть хранилище:

public class PersonController : Controller
{
    private IPersonRepository _personRepository;
    public PersonController(IPersonRepository personRepository)
    {
        _personRepository = personRepository;
    }
}

Затем используйте контейнер IoC (мне нравится StructureMap ) для зависимостей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...