R – how should i add an object into a collection maintained by aggregate root

domain-driven-design

lets say i have a BlogPost aggregate root. it holds a List<Comment>.
how should the BlogPost AddComment signature look? is it OK to use:

public void AddComment(Comment comment)
{
    Comments.Add(comment);
}

or should i avoid creating references to root's children outside of it, and do something like this:

public void AddComment(string text, string email)
{
    Comment comment = new Comment(text, email);
    Comments.Add(comment);
}

Best Answer

If you believe in DDD, it's perfectly fine to know about some entity beneath the aggregate root, as long as you do not store an ID or a reference to it somewhere outside of the aggregate.

I would go for the blogPost.AddComment(new Comment(...))-version.

Related Topic