Рассмотрим типичный блог с объектами Post
и Comment
.
. Для демонстрационного примера DDD, который я строил, я обнаружил (до сих пор), что обе сущности Post
и Comment
были подходящими для того же агрегата - агрегат Post
.Но теперь я не уверен ...
В моих контроллерах я нахожу, как и следовало ожидать, что мне нужно добавить и удалить Comments
из Posts
.С моей текущей моделью я не отслеживаю идентичность Comment
во всем мире (как предполагает Синяя книга).Возможно, вы ожидаете, что мое действие по удалению Comment
может выглядеть так:
public ActionResult DeleteComment(int postID, int commentID)
Очевидно, мне нужен идентификатор Post
для его извлечения из хранилища и идентификатор для конкретного Comment
на том Post
, который я хочу удалить.
Моя проблема в теле действия DeleteComment(
:
Можно ли пройти через Post
с помощью механизма запросовполучить Comment
для удаления?как это:
var comment = this._postRepo.WithID(postID).Comments
.SingleOrDefault(c => c.ID == commentID);
this._postRepo.Delete(comment);
return RedirectToAction("detail", new { id = postID });
.. или я должен выбрать Comment
из репо, аналогичного этому?:
var comment = this._postRepo.CommentWithID(commentID)
.. или:
var comment = this._postRepo.CommentWithID(postID, commentID)
Два приведенных выше примера могут показаться немного глупыми, поскольку мне не нужен идентификатор Post
, если я могу отслеживать Comment
в глобальном масштабе.Но тогда, если я отслеживаю Comment
в глобальном масштабе, разве он не должен иметь свою собственную совокупность, и тогда это правильно, когда Post
и Comment
, кажется, идут вместе?