NCQRS: как вы загружаетесь с домена?
Пройдите стандартный процесс регистрации:
пользователь регистрируется
пользователю отправлено письмо с ссылкой активировать аккаунт
пользователь активирует аккаунт
проблема, о которой я говорю, это:
при создании первоначального аккаунта мы храним имя пользователя, пароль, адрес электронной почты, ключ активации
когда пользователь щелкает ссылку ключа активации, мы проверяем ключ с помощью readmodel
затем мы запускаем ActivateAccountCommand, передавая имя пользователя
Как загрузить учетную запись пользователя, чтобы активировать ее в домене?
Первоначально я хотел передать новым пользователям Acount.Id в readmodel, но нет доступа (который я знаю) из CommandExecutorBase - мы не сохраняем это:
protected override void ExecuteInContext(IUnitOfWorkContext context,
CreateAccountViaFormRegistrationCommand command)
{
var newKey = Guid.NewGuid().ToString();
var newAccount = new Account(
command.UserName, command.Email, command.Password, newKey);
SendWelcomeEmail(command.Email, command.UserName, newKey);
context.Accept();
}
1 ответ
Вы можете опубликовать AccountActivationKeySent
событие, которое, в свою очередь, может быть обработано, чтобы заполнить любую проекцию, которая вам нужна на стороне чтения. Что-то вроде:
// 1. Create and send the command from your client:
var command = new CreateAccountViaFormRegistrationCommand {
AccountId = Guid.NewGuid(),
...
}
// 2. Create a new account in your command handler
var newAccount = new Account(command.AccountId, ...);
context.Accept();
// 3. And your account constructor (assuming it's inheriting from one
// of EventSource's subclasses, e.g. AggregateRootMappedByConvention)
// might look like this:
public Account(Guid accountId, string name, ...) {
EventSourceId = accountId;
ApplyEvent(new AccountCreated { AccountId = Id, ... } );
ApplyEvent(new AccountActivationSent { AccountId = Id, ... })
}