04月20日

質問者さん

ユーザとタグをエンティティとして実装している ユーザが集約ルート ユーザ作成時にタグを付与すると、タグが作成される テーブルはユーザテーブル、タグテーブル、ユーザとタグの関連管理テーブルの3つがある といった場合、ユーザ作成処理はユーザリポジトリに、タグ作成処理はタグリポジトリに書くのだと思いますが、ユーザとタグの関連を管理する処理はどこに記載すべきでしょうか

04月23日

松岡@ログラス/DDD,アジャイル

松岡@ログラス/DDD,アジャイルさん

それは集約の設計に依存します。 画像のパターン①は、ユーザ付与タグというオブジェクトはユーザーエンティティの子オブジェクトとして保持し、ユーザーリポジトリにユーザーエンティティのインスタンスごと渡します。 ユーザー付与タグオブジェクトはタグIDを保持します。 https://gyazo.com/dcdb780629e3633105d4a29bb8b7830a パターン②の場合は、ユーザー付与タグエンティティはユーザーIDとタグIDを保持し、リポジトリもユーザーリポジトリとユーザー付与タグリポジトリに分かれます。 どのようにしてこのパターンどちらにするかを判断するかと言うと、集約の範囲によるメリットデメリットで判断します。 集約を大きくするメリット → 整合性を確保する実装とテストが簡単になる 集約を大きくするデメリット →処理するデータ量が増える →排他制御の範囲が大きくなる 集約を跨いだ場合の整合性を確保する実装はこちらをご覧ください。 https://little-hands.hatenablog.com/entry/2021/03/08/aggregation

松岡@ログラス/DDD,アジャイルさんに 質問してみましょう!

松岡@ログラス/DDD,アジャイル

松岡@ログラス/DDD,アジャイル

DDD Community JP主催。DDDや設計にお困りの方はDMにてご相談ください。講義、モブモデリングやコーディングなどご要望に合わせた進め方でサポートします(オンライン)。 YouTube: https://t.co/Vj72xhwAop

松岡@ログラス/DDD,アジャイルさんが

最近答えた質問

37分前

CQRSで実装するときに、usecase層でDTOを定義し、infra層でデータの取得・DTOへの詰め替えて、usecase層に返します。 その際に、DTOのフィールドにjsonタグをつけて、そのままAPIの返り値として利用しても問題ないのでしょうか?

1時間前

オニオンアーキテクチャを採用しており、CQRSを導入しています。例えば1集約の参照をしたい場合、QueryServiceではなく、Repositoryから取得した方がいいのでしょうか?その場合、Repositoryに参照系と更新系の処理が混在することになり、CQRSのルールを守れているのか疑問に感じています。複数集約にまたがる参照の場合はQueryServiceに書いているのですが、1集約の場合にどうするのか悩んでおり。

19時間前

例えばspring bootの@GetControllerの引数に定義したリクエストパラメータのバリデーションなどはどのようにunit testすべきでしょうか? class単位でのunit testが難しいため、テストコード内でspring bootのアプリケーションを起動し、localhost:8080/test にリクエストしてバリデーションがかかること(400が返ること)、でテストしていたのですが、やりたいテストに対してテストコードがリッチすぎるのではないかと思っています。