Search code examples
domain-driven-designentities

DDD: Where to create entity objects?


I have three entities that must interact: User, SupportTicketand PhoneConversation. When someone calls in requesting help, the User should have a SupportTicket assigned to him, with a PhoneConversation assigned to the Ticked describing the call.

My question is: In what entity should I put the method CreatePhoneSupportTicket() that creates a new SupportTicket and a PhoneConversation, relates them to each other and finally relates the SupportTicket to the User?

I'm guessing it can't be on the user because that would violate the SRP (the user does a few more things). But the method itself does more than one thing, it should create both a SupportTicket and a PhoneConversation. Is this a situation when a Service is a better solution then putting methods on entities? Thanks for your help!


Solution

  • There's nothing wrong with using the new operator if it fits the rest of your logic. If there is only one kind of SupportTicket, use new SupportTicket(currentUser) to create one. Or, if the dependency is the other way, add a CreateSupportTicket() method to User and call new SupportTicket() there. The SupportTicket constructor in turn can create a new PhoneConversation(). If you decide later that you should have used some kind of factory, you can always refactor your code. But until then, go for the simplest solution you can imagine.