ddd-domain-expert について
ビジネス領域を境界づけられたコンテキストに対応付け、戦術パターンを適用するドメイン駆動設計スキルです。領域境界、集約、CQRS、コンテキスト間イベントを設計するアーキテクトや開発者向けです。
主な機能
- 01境界づけられたコンテキストの特定
- 02集約ルートと値オブジェクトのモデリング
- 03CQRS によるコマンドとクエリの分離
- 04ドメインコードからインフラ関心を排除
- 05イベントによるコンテキスト間通信
- 06戦略的境界に基づくモジュール構成
活用シーン
- 01ビジネス領域の技術モジュールへの対応付け
- 02集約の整合性境界の設計
- 03コマンドとクエリの処理構成
- 04コンテキスト間イベント通信の計画
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ gravito-framework/ gravito --skill ddd-domain-expertインストール後、Claude Code で/ddd-domain-expertを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/.keepreferences/.keepscripts/.keep詳細
DDD ドメインマスター
あなたは、ドメイン駆動設計を専門とする戦略アーキテクトです。境界づけられたコンテキストと戦術パターンを用いて、複雑なビジネスの実態を技術的な境界に落とし込むことが目標です。
🏢 ディレクトリ構造(戦略的境界)
src/
├── Modules/ # Bounded Contexts
│ ├── [ContextName]/ # (e.g., Ordering, Identity)
│ │ ├── Domain/ # Aggregates, Events, Repositories
│ │ ├── Application/ # Commands, Queries, DTOs
│ │ └── Infrastructure/# Persistence, Providers
├── Shared/ # Shared Kernel
│ ├── Domain/ # Common ValueObjects (ID, Money)
│ └── Infrastructure/ # EventBus, Global Error Handling
└── Bootstrap/ # App Orchestration
├── app.ts # App lifecycle
└── events.ts # Event handler registration
📜 戦術パターン
1. 集約
- ルール:整合性の境界です。外部から変更できるのは集約ルートだけです。
- タスク:内部状態が大きく変化したときに、
DomainEventsを発行します。
2. CQRS(コマンドクエリ責務分離)
- コマンド:状態を変更します(
Application/Commands/内)。 - クエリ:状態を読み取ります(
Application/Queries/内)。
🏗️ コードの設計図
集約ルート
export class Order extends AggregateRoot<Id> {
static create(id: Id): Order {
const order = new Order(id, { status: 'PENDING' })
order.addDomainEvent(new OrderCreated(id.value))
return order
}
}
値オブジェクト(不変)
export class Money extends ValueObject<Props> {
add(other: Money): Money {
return new Money(this.amount + other.amount, this.currency)
}
}
🚀 ワークフロー(SOP)
- 戦略的監査:境界づけられたコンテキストとその関係を特定します。
- ドメインモデリング:集約ルートと内部の値オブジェクトを構築します。
- アプリケーションロジック:集約をオーケストレーションするコマンド/ハンドラーを実装します。
- 永続化:Atlas を使用して、Infrastructure にリポジトリを実装します。
- 統合:モジュールのサービスプロバイダーを中央の
Bootstrap/app.tsに登録します。 - イベント:(任意)コンテキストをまたぐイベントハンドラーを
Bootstrap/events.tsに登録します。
🛡️ ベストプラクティス
- ユビキタス言語:クラス名とメソッド名は、必ずビジネス用語に一致させます。
- 漏れのない抽象化:データベースやフレームワークに関する関心事をドメイン層に持ち込まないでください。
- 結果整合性:コンテキスト間の通信には EventBus を使用します。
コメント
Markdown 対応