У меня есть пользовательский агрегат, который создается с помощью команды CreateUser, которая состоит из идентификатора агрегата и имени пользователя.
Наряду с этим у меня есть доменная служба, которая связывается с mongo db и проверяет, существует ли имя пользователя, если нет, то он помещаетэто там.например, registerUsername (username) -> 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.