2012-02-16 4 views
5

Я составил совокупный класс с именем Question. Здесь ссылаются на Answer, Category, Feedback объектов. Должен ли QuestionRepository быть класс, содержащий все методы, запрашивающие базу данных, связанную с Вопросом, а также все методы запроса обратной связи, ответа и т. Д.? Или они должны быть отдельными классами, такими как QuestionRepository, FeedbackRepository и т. Д.Агрегатный объект в DDD

ответ

1

От DDD web site:

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

Репозиторий используется, когда вам необходим прямой доступ к сущности, т. Е. Когда нет другого удобного способа получить этот объект, кроме того, что он непосредственно извлекает его из постоянного хранилища. Напротив, если вы считаете, что объект в большинстве случаев легко доступен через обход другого объекта, который у вас уже есть, тогда нет необходимости в репозитории. Это похоже на ответ, категория и отзывы здесь.

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

Предлагаю вам прочитать синюю книгу DDD или какой-либо учебник, чтобы получить базовое представление о строительных блоках DDD, прежде чем вы начнете строить свою модель домена.

+0

Но я хочу получить все отзывы, а затем перейти от обратной связи к вопросу, который он прилагает. Должно ли хранилище вопросов извлекать объекты обратной связи? – LuckyLuke

+0

Я бы избежал обращения к репозиторию Question Feedback. Если обратная связь действительно является одной из основных точек входа в приложение (т. Е. На экране отображаются только обратные связи без их вопросов, пользователь может искать отзывы с подробными критериями ...), я бы дал ему свой собственный репозиторий и, возможно, даже сделал это Агрегатный корень. Я думаю, это сводится к «будет ли когда-нибудь иметь смысл иметь обратную связь без его вопроса?» – guillaume31

+0

Обратная связь всегда связана с вопросом. Тем не менее, я хочу перечислить все обратные связи в системе на свой взгляд (между прочим), и когда пользователь нажмет кнопку «Обратная связь», он отобразит соответствующий вопрос. – LuckyLuke

2

От того, как вы объяснили, я предполагаю, что каждый вопрос будет иметь 1 или больше ответов, 1 или больше Обратной связи и вопрос относится к определенной категории

Поскольку ответ и обратная связь зависит от вопроса и не может существовать независимо, у вас может быть один QuestionRepository для этих трех объектов.

Приходя к категории, категория является более статичного объекта, который ИМО является статическим, поэтому все такие статические объекты могут быть сгруппированы вместе в StaticRepository

+0

Вы правы в вопросе отношений. Но у меня есть представление, в котором перечислены все, например. Обратная связь, тогда, когда вы нажимаете строку «Обратная связь», вы увидите обратную связь, а также вопрос, к которому она относится. Должен ли я затем запрашивать QuestionRepository? – LuckyLuke

+0

Да и он должен вернуть упрощенную модель, подходящую для модели представления. – MikeSW

+0

Итак, даже если это не вопрос, который я возвращаю из метода (это обратная связь), метод для этого должен быть в QuestionRepository, потому что Feedback не живет сам по себе? Он по-прежнему связан с вопросом, даже если вы проходите через свойство отношений. – LuckyLuke

Смежные вопросы