首先,讓我說這裏沒有硬性規定,這是我的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爲中心的方式來處理Answer與Question相同的聚合,Question是聚合根。通常你可以向倉庫詢問一個問題對象(大概是由id),然後從那裏導航到Answer(通過Question上的Answers集合) - 例如,
var question = _questionRepository.GetQuestion(questionId);
foreach(var answer in question.Answers)
{
Console.WriteLine(answer.Description); // or do something useful instead!
}
如果這似乎是一個奇怪的方式保存或檢索應答對象,那麼你可能要重新評估是否應答並在同一集合實際上屬於,或是否會更好,打破它的這個問題總計在一起。
這就是我希望不會得到的答案:)謝謝 – zsharp 2009-04-18 00:37:05