私は、次のプロジェクト、特にCQRSの設計にDDDの概念を採用しています。CQRSと同期操作(ユーザー登録など)
私は今、簡単な概念の証明を実装しようとしています。
事は、私が始めた後、私はこだわって右のよです:P
私は、簡単なユーザー登録プロセスにこのアプローチを適用する手順がされている場所をしようとしている:
- ユーザー登録を埋めますフォーム&アプリアプリは、ユーザ(自動ログイン)
- アプリverificaを送信する認証ユーザ
- を作成する要求
- を提出します私はこれまで何を得るのアプリは、実装の観点からの確認メッセージ
でどこか別の場所にユーザーをリダイレクト
- コントローラのアクションをマップしますRegisterCommandオブジェクトにデータを要求します。
- コントローラアクションは、RegisterCommandを処理するようにコマンドバスに要求します。
- コマンドハンドラ(UserService)の "register"メソッドは、新しいUserオブジェクトを作成しますモデルはRegisterEvent
- コマンドハンドラがそれだ新しいユーザーオブジェクト
を格納するリポジトリを尋ね、コントローラのアクションのいずれかを知っていません提起する新しいコマンドまたはファクトリオブジェクト)
私はこのコンテキストのすべてが同期して(電子メールの送信を除いて)実行されているため、直接/同期コマンドバスを使用できます。コントローラアクションでは、コマンドバス呼び出しの直後です私は読取り専用のユーザー(照会データベース)を照会することができます。存在すればすべてがうまくいったと仮定して、ユーザーに確認メッセージを与えることができます。
自動ログインプロセスは、イベントハンドラによって処理されます。
これが正しいとすれば、何か問題が生じた場合、正しい情報をユーザーに通知する方法を教えてください。
一般的な例は、インターネットで見つけることができる記事でよく使用されます。顧客は期限切れのクレジットカードを使用して注文を行います。システムは要求を受け入れ、すべてがOKであることをユーザに知らせるが、ユーザは数分後に注文を処理できなかったことを知らせる電子メールを受信する。
このシナリオは多くの場合許容されますが、他の場合はこれが不可能です。では、これらのユースケースを扱う例はどこにありますか? :p
ありがとうございました!
これらのプロセッサは同じスレッドで動作していますか?コマンド/イベントを処理している別のサービスが別の場所で実行されていますか? – Sarmaad
スクリプト言語を使用しているため、スレッドはありません。 最終的にはキューイングサーバーが存在する可能性がありますが、このユースケースではないと思います。 – Benjamin