コマンド、ドメイン モデル、ドメイン イベント、モデル DTO の読み取りなどのコンポーネントを備えた、CQRS にヒントを得たアーキテクチャがあるとします。
もちろん、ドメイン モデルで値オブジェクトを使用できます。私の質問は、それらが以下でも使用されるべきかということです:
- コマンド
- イベント
- DTO
上記のコンポーネントで値オブジェクト (VO) が使用されている例は見たことがありません。代わりに、プリミティブ型が使用されます。単純化した例にすぎないのかもしれません。結局のところ、DDD での VO の使用についての私の理解は、VO がアプリケーション全体の接着剤として機能するということです。
私の動機:
コマンド。
ユーザーが住所フィールドを含むフォームを送信したとします。この概念を表す Address Value Object があります。クライアントでコマンドを構築するときは、とにかくユーザー入力を検証する必要があり、整形式であれば、すぐに Address オブジェクトを作成して Command を初期化できます。Address オブジェクトの作成をコマンド ハンドラーに委任する必要はないと思います。
ドメイン イベント。
ドメイン モデルはすでに値オブジェクトの観点から動作しているため、イベントをプリミティブ型に変換する代わりに VO を使用して発行することで、マッピング コードを回避できます。この場合、VOを使用しても問題ないと確信しています。
DTO。
クエリ側の DTO に値オブジェクトを含めることができれば、柔軟性がいくらか向上します。たとえば、Money オブジェクトがある場合、それを EUR で表示するか USD で表示するかを選択できます。読み取りモデルを変更する必要はありません。