0

標準の登録プロセスを実行します。

  1. ユーザーがサインアップする

  2. アカウントを有効化するためのリンクが記載された電子メールがユーザーに送信されます

  3. ユーザーがアカウントを有効化

私が話している問題は次のとおりです。

  • 最初のアカウントを作成すると、ユーザー名、パスワード、電子メール、アクティベーション キーが保存されます

  • ユーザーがアクティベーション キーのリンクをクリックすると、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();
}  
4

1 に答える 1

2

イベントをパブリッシュできます。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, ... })
}
于 2011-11-16T14:21:24.083 に答える