refactor: 値オブジェクトを所属する集約ディレクトリに移動#80
Conversation
value-objects/ を廃止し、各値オブジェクトを使用元の集約内に配置。 ValueObject基底クラスはdomain/base/に移動。 型別ではなくドメイン別のディレクトリ構成に統一する。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
| export * from "./LightningTalkDuration"; | ||
| export * from "./Url"; |
There was a problem hiding this comment.
🚩 Url and LightningTalkDuration are now scoped to the event aggregate
By moving Url into domain/aggregates/event/Url.ts and LightningTalkDuration into domain/aggregates/event/LightningTalkDuration.ts, these value objects are now conceptually part of the event aggregate. Currently no other aggregate uses Url or LightningTalkDuration, so this is fine. However, if a future aggregate (e.g., member) needs a Url value object, importing it from the event aggregate would create a cross-aggregate dependency, which is a DDD anti-pattern. The previous shared value-objects location avoided this. This is a design trade-off worth being aware of — if Url is a general-purpose value object, it might belong in domain/base/ alongside ValueObject.
Was this helpful? React with 👍 or 👎 to provide feedback.
There was a problem hiding this comment.
Pull request overview
DDDのドメイン別ディレクトリ構成へ寄せるため、値オブジェクトを domain/value-objects/ から各集約配下へ移動し、共通基底 ValueObject を domain/base/ に再配置するPRです。
Changes:
domain/value-objects/を廃止し、VOをaggregates/member/aggregates/eventへ移動ValueObjectをdomain/base/に移動し、domain/index.tsからbaseを再export- 参照側のimport/export(barrel)を移動先に合わせて更新
Reviewed changes
Copilot reviewed 13 out of 15 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| src/domain/value-objects/index.ts | value-objects のbarrel exportを削除(ディレクトリ廃止に伴う) |
| src/domain/index.ts | base をexportし、従来の value-objects export を削除 |
| src/domain/base/index.ts | ValueObject のbarrel exportを追加 |
| src/domain/base/ValueObject.ts | ValueObject 基底クラスを新配置 |
| src/domain/aggregates/member/index.ts | member集約でVO(Departments/Email/UniversityEmail)をexport |
| src/domain/aggregates/member/UniversityEmail.ts | UniversityEmail VOをmember集約配下へ追加 |
| src/domain/aggregates/member/Member.ts | VO参照を #domain/value-objects から同集約配下へ変更 |
| src/domain/aggregates/member/Email.ts | ValueObject のimport先を domain/base 配下へ変更 |
| src/domain/aggregates/member/Departments.ts | ValueObject のimport先を domain/base 配下へ変更 |
| src/domain/aggregates/event/index.ts | event集約でVO(LightningTalkDuration/Url)をexport |
| src/domain/aggregates/event/Url.ts | ValueObject のimport先を domain/base 配下へ変更 |
| src/domain/aggregates/event/LightningTalkDuration.ts | ValueObject のimport先を domain/base 配下へ変更 |
| src/domain/aggregates/event/LightningTalk.ts | VO参照を #domain/value-objects から同集約配下へ変更 |
| src/domain/aggregates/event/Exhibit.ts | VO参照を #domain/value-objects から同集約配下へ変更 |
| src/domain/aggregates/event/Event.ts | VO参照を #domain/value-objects から同集約配下へ変更 |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
## Summary - `domain/value-objects/` を廃止し、各値オブジェクトを使用元の集約ディレクトリに移動 - `Email`, `UniversityEmail`, `Departments` → `aggregates/member/` - `LightningTalkDuration`, `Url` → `aggregates/event/` - `ValueObject` 基底クラスを `domain/base/` に移動 - 型別ではなくドメイン概念別のディレクトリ構成に統一 ## Motivation 既存の構造では値オブジェクトがビルディングブロックの型別(`value-objects/`)にトップレベルで切り出されており、どの集約に属する概念なのかが不明瞭だった。 各値オブジェクトは実際には特定の集約でのみ使用されているため、使用元の集約ディレクトリに配置することで、ドメイン概念の凝集度を高める。 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Summary
domain/value-objects/を廃止し、各値オブジェクトを使用元の集約ディレクトリに移動Email,UniversityEmail,Departments→aggregates/member/LightningTalkDuration,Url→aggregates/event/ValueObject基底クラスをdomain/base/に移動Motivation
既存の構造では値オブジェクトがビルディングブロックの型別(
value-objects/)にトップレベルで切り出されており、どの集約に属する概念なのかが不明瞭だった。各値オブジェクトは実際には特定の集約でのみ使用されているため、使用元の集約ディレクトリに配置することで、ドメイン概念の凝集度を高める。
🤖 Generated with Claude Code