UserService that RegistrationApiController depends on is very thin because its responsibility only includes the following:
- Coordinating tasks on the models
- Guarding the domain model with security constraints
- Controlling transactions
Most importantly, its responsibility should not involve any business logic. Business logic should only live in the domain models. Figure 9.11 shows the relationship between UserService and its dependencies:
Figure 9.11: UserService class diagram
As you can see, the implementation of UserService, which is UserServiceImpl, relies on RegistrationService, which is a Domain Service to handle the actual registration. It also relies on MailManager to send email and DomainEventPublisher to publish the UserRegisteredEvent domain event.