I have three entities that must interact: User
, SupportTicket
and 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!
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.
In this case i will recomend putting this method in a Domain Service
So … Domain Services Are … What? Well, if Entities and Value Objects are the “things” in our Domain, the Services are a way of dealing with actions, operations and activities. Shouldn’t Logic Be on the Entities Directly? Yes, it really should. We should be modelling our Entities with the logic that relates to them and their children. But sometimes that logic either doesn’t fit on the Entity, or it would make the Entity bloated and unwieldy. That is when Services come into the picture. They help us split logic that deals with multiple Entities, or that deals with complex operations or external responsibilities, into a separate structure more suited to the task.structure more suited to the task.
From Domain Driven Design Step by Step (Free E-book) Page #19
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With