CommandHandlers が他の CommandHandlers と通信できる/できないかどうかについて、いくつかの意見を得ようとしています。
これは、私が遭遇した単純なケースです。次のようなコマンドの ChangePasswordCommandHandler があります。
public class ChangePasswordCommand : Command
{
public string Email { get; }
public string OldPassword { get; set; }
public string NewPassword { get; set; }
}
そのため、ハンドラー内でユーザーの古いパスワードを検証する必要があるため、次の 3 つのオプションがあります。
- ValidateCredentialsCommandHandler への呼び出しをディスパッチします。
- 検証ロジックの一部を、両方のハンドラーが使用できるサービスに分解します。
- 呼び出しプロセスに最初にこのチェックを行わせますが、ビジネス ロジックがドメイン層の外に漏れています。
他のハンドラーへのディスパッチでいくつかの技術的な問題が発生しています。ほとんどの場合、Web リクエストごとのトランザクションを使用しているため、競合しようとしている 2 つのトランザクションがあります。
考え?