私が理解しているように、CQRS の基本的な信条の 1 つは、コマンドは動作中心であり、ビジネスまたは UL で値を持つべきであり、データ中心、つまり CRUD ではないということです。顧客の更新に集中する代わりに、CustomerHasMoved のようなコマンドがあります。特定のデータを修正するための CRUD 画面がある場合はどうでしょうか。たとえば、スペルミスのある顧客の名前を変更する必要があります。これは、ビジネスにおいてあまり価値がありません。これは、UpdateCustomer コマンドの傘下に置く必要がありますか?
3 に答える
出てきたので早速コメントしたいと思います。
一部のオブジェクトは実際には CRUD であり、それで問題ないことに注意することが重要です。製品を人々に出荷し、宛名ラベルを印刷するためだけにそのデータが必要なドメインで名前が変更される理由はあまり気にしないかもしれません。トリックは、動作をデフォルトにして、その逆ではなく理由を本当に気にしないと確信したら、CRUD インターフェイスに戻すことです。
グレッグ
実際、顧客の名前を更新する理由はさまざまです。おっしゃる通り、スペルミスか… 結婚して夫の姓に変えるかもしれません。
UpdateCustomer コマンドしかない場合、元の意図が失われ、それぞれに対して異なる動作を行うことができなくなります。名前が誤って販売された場合は、データベースを更新するのと同じくらい簡単かもしれませんが、顧客が結婚した場合は、割引を提供できるようにマーケティング部門に通知する必要があるかもしれません.
エンティティが純粋に CRUD である場合、つまり、プロパティの変更に関連付けることができる意図がない場合は、UpdateEntityCommand を使用しても問題ありません。その後、よりタスクベースのものにゆっくりと移行できます
CustomerHasMoved は、顧客の場所を更新した後に発生するイベントです。このイベントは、読み取りデータベース/キャッシュ データベースを更新します。GUI からのコマンドは、MoveCustomer などにする必要があります。顧客名の更新は、UpdateCustomer のようなコマンドに入れると思います。