Во-первых, позвольте мне сказать, что здесь нет жестких и быстрых правил, это мое понимание DDD и доступа к хранилищу, но это довольно субъективная область ...
Итак, с точки зрения DDD, что вы можете сделать, добавляя ответ на существующий вопрос, что-то вроде следующего псевдокода в стиле C #:
using(unitOfWork = new UnitOfWork())
{
var question = _questionRepository.GetQuestion(questionId);
question.AddAnswer(new Answer("blah"));
unitOfWork.SaveChanges();
}
Предполагается, что вы используете ORM, который обрабатывает отслеживание изменений и настроен на каскадное перемещение дочерних объектов обратно в базу данных, и это все, что вам нужно сделать (я думаю о NHibernate здесь, но другие ORM могут работать аналогично путь). Добавляя ответ на вопрос, вы сообщаете ORM, что хотите, чтобы ответ сохранялся в базе данных после завершения единицы работы. Обычно вы бы не вызывали SaveAnswer (QuestionId) - это не очень DDD-ориентированный способ приблизиться к вещам, где ответ находится в той же совокупности, что и вопрос, а вопрос - корень совокупности.
Для извлечения объектов из базы данных, как правило, вы запрашиваете в хранилище объект вопроса (предположительно по идентификатору), а затем переходите оттуда к ответу (через коллекцию ответов на вопрос) - например,
var question = _questionRepository.GetQuestion(questionId);
foreach(var answer in question.Answers)
{
Console.WriteLine(answer.Description); // or do something useful instead!
}
Если это кажется странным способом сохранения или извлечения объекта Ответа, то вам может потребоваться переоценить, действительно ли Ответ относится к одному и тому же агрегату, или было бы лучше вычеркнуть его из совокупности вопросов вообще .