Репозиторий класса в DDD - PullRequest
       3

Репозиторий класса в DDD

7 голосов
/ 16 февраля 2012

Я пытаюсь следовать DDD, и у меня есть класс Question и класс Feedback (среди прочих). Я хочу иметь возможность подсчитывать количество вопросов, количество отзывов и многое другое, что считается метаоперациями.

Должны ли такие "мета" методы находиться в том же хранилище, что и другие методы, принадлежащие классу, или они должны быть в MetaRepository, где у вас есть разные мета методы, которые запрашивают базу данных (в этом случае все классы будут смешаны)

Ответы [ 4 ]

9 голосов
/ 16 февраля 2012

Ничто в DDD не запрещает иметь более одного репозитория на агрегат. Вы можете просто иметь один репозиторий для базовых запросов и методов жизненного цикла (IQuestionsRepository) и отдельный репозиторий для целей, которые вы называете «мета» или «статистика» (IQuestionsStatistics). Это очень хорошо работает для больших доменов, где следование принципу один репозиторий на совокупность может привести к «взрыву метода» и нарушению SRP. Следование DDD не должно противоречить основным принципам ООП.

1 голос
/ 16 февраля 2012

Для меня каждый репозиторий отвечает за подсчет своих элементов, это один из методов getById, getAll ... (стандартные методы).

0 голосов
/ 16 февраля 2012

Я бы придерживался большего количества одного репозитория на класс модели домена, либо использовал бы общий репозиторий

Лично я никогда не видел, чтобы кто-нибудь создал MetaRepository для цели, которую вы описываете

0 голосов
/ 16 февраля 2012

Являются ли эти вопросы («сколько отзывов?») И количества, которые они относятся к важной части вашего домена?

Если это так, они кажутся разумными запросами для вашего хранилища. В конце концов, задача вашего репозитория - отвечать на вопросы, относящиеся к домену, о агрегатах, которые он содержит.

Если нет, например если это просто случайные вещи, возможно, для отображения пользователю, то эти вопросы могут полностью принадлежать службе приложения, вне уровня домена.

...