value-objects-and-dtos について
Symfony 開発向けのスキルです。ドメイン値には値オブジェクト、境界をまたぐデータには DTO を用いる設計を導きます。不変設計や Doctrine での永続化、不変条件のテストも扱います。
主な機能
- 01値オブジェクトと DTO の使い分け
- 02生成時の検証と不変性
- 03値による等価性と新しいインスタンスでの操作
- 04Doctrine 埋め込みとしての永続化
- 05入力 DTO と出力 DTO の分離
- 06各不変条件のテスト
活用シーン
- 01ドメイン概念の生のスカラー値を置き換える
- 02リクエストや API 境界のデータを設計する
- 03Doctrine エンティティに値オブジェクトを格納する
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill value-objects-and-dtosインストール後、Claude Code で/value-objects-and-dtosを入力して読み込まれたか確認します。
同梱ファイルreference.md
詳細
値オブジェクトと DTO(Symfony)
使用する場面
- 独自のルールを持つドメイン概念(お金、メールアドレス、住所など)が、生のスカラー値として渡されている場合。
- データが境界を越える場合:リクエスト入力、API 出力、メッセージのペイロード。
- Doctrine エンティティ内に値オブジェクトを保存する場合。
デフォルトのワークフロー
- 不変条件を持つドメイン概念には値オブジェクトを、境界を越えるデータには DTO を使うかを決めます。
readonlyにし、コンストラクターで検証して、すばやくエラーを返します。- 値オブジェクトには値に基づく等価性を持たせ、新しいインスタンスを返す操作を実装します。
- 値オブジェクトは Doctrine の埋め込み可能オブジェクトとして永続化します。
- 入力 DTO(検証制約)と出力 DTO(シリアライザー属性)は分けておきます。
ガードレール
- セッターや変更処理は使いません。変更する場合は新しいインスタンスを返します。
- DTO は振る舞いを持たず、データのみを保持します。
- エンティティを API の入力や出力として直接公開しないでください。
- 金額は浮動小数点数ではなく、最小通貨単位の整数として保存します。
段階的な情報開示
- 実行時の指針とリスク管理には、このファイルを使用します。
- 詳細な実装情報が必要な場合は、参照資料を開きます。
出力要件
- 不変条件と等価性を備えた値オブジェクト。
- 入力 DTO と出力 DTO、およびそれらとエンティティとのマッピング。
- 各不変条件の単体テスト。
参照資料
reference.md
コメント
Markdown 対応