У меня есть совокупность пользователей, которая создается с помощью команды CreateUser, которая состоит из совокупного идентификатора и имени пользователя.
Наряду с этим у меня есть служба домена, которая связывается с mongo db и проверяет, существует ли имя пользователя, если не помещает его туда. например, registerUsername (имя пользователя) -> true / false независимо от того, зарегистрировал он его или нет
Мой вопрос: было бы неплохо создать обработчик команд поверх пользовательской совокупности, который бы обрабатывал команду CreateUser и независимо от того, имеет ли он имя пользователя или нет, будет отправлять правильные команды / события? вот так:
@Component
class UserCommandHandler(
@Autowired
private val repository: Repository<User>,
@Autowired
private val eventBus: EventBus,
@Autowired
private val service: UniqueUserService
) {
@CommandHandler
fun createUser(cmd: CreateUser) {
if (this.service.registerUsername(cmd.username)) {
this.repository.newInstance { User(cmd.id) }
.handle(GenericCommandMessage(cmd))
} else {
this.eventBus.publishEvent(UserCreateFailed(cmd.id, cmd.username))
}
}
}
Этот вопрос не обязательно относится к установленной уникальности в ddd, но скорее связан с вопросом, куда я должен поместить зависимость доменных служб? Я, вероятно, мог бы создать сагу о регистрации пользователей и внедрить эту службу внутри саги, но я думаю, что сага должна полагаться только на диспетчеризацию команд и не иметь никакой логики if / else.