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

domain-driven-design

Solution

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.

Problem

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); } ```

Original source