Вопрос

В реальном мире контроллеры могут потенциально надо использовать данные из различных таблиц базы данных и других хранилище данных. Например:

[Authorize]
    public class MembersController : Controller
    {
        ICourseRepository repCourse;
        IUserCourseRepository repUserCourse;
        IMember member;
        public MembersController(ICourseRepository repCourse, IUserCourseRepository repUserCourse, IMember member)
        {
            this.repCourse = repCourse;
            this.repUserCourse = repUserCourse;
            this.member = member;
        }

Так:

  1. Должен ли я использовать репозиторий для каждой таблицы?

  2. Я думаю, что это где концепция агрегатов вступает в игру? Должен ли я иметь один репозиторий за совокупность?

  3. Я просто добавляю столько репозиторий, сколько мне нужно для конструктора контроллера?

  4. Это признак того, что мой дизайн неправ?

ПРИМЕЧАНИЕ:

Интерфейс Imember по существу представляет собой хелперский объект, который ставит красивое лицо на провайдер членства. Т.е. это помещает весь код в одном месте. Например:

        Guid userId;
        public Guid UserId
        {
            get
            {
                if (userId == null)
                {
                    try
                    {
                        userId = (Guid) Membership.GetUser().ProviderUserKey;
                    }
                    catch { }
                }
                return userId;
            }
        }

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

РЕДАКТИРОВАТЬ:

Я использую Ninject для di и довольно продан в целом di, ddd и tdd вещь. Ну, вроде. Я также стараюсь быть прагматистом ...

Это было полезно?

Решение

1. Должен ли я использовать репозиторий для каждой таблицы?

Возможно нет. Если у вас есть репозиторий на стол, вы по сути, делаете активный рекорд. Я также лично предпочитаю избегать призыва этих классов «Репозиторий» из-за путаницы, который может возникнуть между концепцией дизайна доменов «Репозиторий» и классовым настольным «репозиторием», который, кажется, обычно используются с Linq2SQL, подгруппе и т. Д. И многие учебники MVC.

2. Я думаю, что это где концепция агрегатов вступает в игру? Должен ли я иметь один репозиторий за совокупность?

Да и да. Если вы собираетесь пойти по этому маршруту.

'3.' Я просто добавляю столько репозиторий, сколько мне нужно для конструктора контроллера?

Я не позволяю своим контролям напрямую коснуться моих репозиторий. И я не позволяю своим взглядам коснуться моих доменных классов напрямую.

Вместо этого у моих контроллеров есть классы запросов, которые отвечают за возврат моделей просмотра. Классы запросов ссылаются на любые репозитории (или другие источники данных), им нужно компилировать модель просмотра.

Другие советы

Ну @awrigley, вот мой совет:

Q: Должен ли я использовать репозиторий для каждой таблицы?

A: Нет, как вы упомянули на вопрос 2. Используйте репозиторий на совокупность и выполняйте операции только на совокупном корне.

Q: Я просто добавляю столько репозиториев, сколько мне нужно для конструктора контроллера?

A: Я думаю, вы используете IOC и конструктор-инъекцию, ну в этом случае убедитесь, что вы проходите только реальные зависимости. эта почта Может помочь вам выбрать эту тему.

(PST! Этот пустой пойман не приятная вещь !!);)

Ваше здоровье!

Это все зависит от того, насколько «дизайн управляемого доменом» ваше будет. Вы знаете, какой совокупный корень? Большую часть времени достаточно типичный репозиторий, который может сделать все ваши основные CRUD. Его только тогда, когда вы начинаете иметь толстые модели с контекстом и границами, которые это начинает иметь значение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top