DDDのCommand
DDDの文脈のCommand
CQRSにおけるCと同じ意味合い
Commandパターンとは関係ないmrsekut.icon
Domain Eventを起こすための誰かの要求のこと
人や、他のDomain Eventによって引き起こされる
e.g. 顧客が注文書を受け取るとことを望んだ
Commandは常に成功するわけではない
もし処理が成功すれば、システムの状態が変化し、1つ以上のDomain Eventが記録される
命令形で書かれる
table:例
↓Command ↓Domain Event
Make X happen X happened
Place an order Order placed
Commandによって、対応するDomain Eventが生じる
更にDomain Eventが別のCommandを引き起こし、それがEventを引き起こし、と連鎖する
Commandは、あるworkflowがリクエストを処理するために必要な全てのものを含む
e.g. コマンドの作成者、タイムスタンプなど
project内のCommandは共通するフィールドを持つこともある
genericsを使った型を用意すると良い
code:ts
type Command<Data> = {
data: Data;
timestamp: Date;
userId: UserId;
...
}
本当にこんな汎用型を用意して上手くいくのか?とちょっと思っているmrsekut.icon
userIdとか常に必要になるとは限らなくない?
完全なグローバルではなく、「Orderの文脈」での共通の型を用意する感じ?
/mrsekut-book-97816805025/136
参考
/mrsekut-book-97816805025/028~
解説、具体例など、図解もある
/mrsekut-book-97816805025/135~