Agent skill

ddd-architecture

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/ddd-architecture

SKILL.md

DDD Architecture Skill

Description

ドメイン駆動設計(DDD)に準拠したバックエンドコードを書くためのスキルです。

Automatic Activation

このスキルは以下のファイルを編集する際に自動で適用されます:

  • backend/src/domain/**/*.ts - エンティティ、リポジトリIF
  • backend/src/application/**/*.ts - ユースケース、DTO、サービス
  • backend/src/infrastructure/**/*.ts - DynamoDB実装、マッパー
  • backend/src/presentation/**/*.ts - コントローラー、ルート
  • backend/src/container/**/*.ts - DIコンテナ

Architecture Layers

Presentation Layer (コントローラー、ルート)
    ↓
Application Layer (ユースケース、アプリケーションサービス)
    ↓
Domain Layer (エンティティ、リポジトリインターフェース)
    ↑
Infrastructure Layer (DynamoDBリポジトリ実装)

Directory Structure

backend/src/
├── domain/
│   ├── entities/{feature}/      # エンティティ定義
│   └── repositories/{feature}/  # リポジトリインターフェース
├── application/
│   ├── dto/{feature}/           # Data Transfer Objects
│   ├── usecases/{feature}/      # ユースケース
│   └── services/{feature}/      # アプリケーションサービス
├── infrastructure/
│   ├── repositories/{feature}/  # DynamoDB実装
│   └── mappers/{feature}/       # エンティティ⇔DBマッパー
└── presentation/
    ├── controllers/{feature}/   # コントローラー
    └── routes/{feature}/        # ルーティング

Implementation Rules

1. Domain Layer

  • エンティティはビジネスロジックを持つ
  • リポジトリはインターフェースのみ定義
  • 外部依存を持たない

2. Application Layer

  • ユースケースは1つの操作を表す
  • DTOで入出力を定義
  • ドメインオブジェクトを操作

3. Infrastructure Layer

  • リポジトリインターフェースを実装
  • DynamoDBとの通信を担当
  • マッパーでエンティティ変換

4. Presentation Layer

  • HTTPリクエスト/レスポンスを処理
  • 認証・認可のミドルウェア適用
  • Swagger定義も更新

New Feature Checklist

新機能追加時は以下を全て実装:

  • domain/entities/{feature}/{Feature}.ts
  • domain/repositories/{feature}/{Feature}Repository.ts
  • application/dto/{feature}/{Feature}Dto.ts
  • application/usecases/{feature}/{Feature}UseCase.ts
  • infrastructure/repositories/{feature}/DynamoDB{Feature}Repository.ts
  • infrastructure/mappers/{feature}/{Feature}Mapper.ts
  • presentation/controllers/{feature}/{Feature}Controller.ts
  • presentation/routes/{feature}/{feature}Routes.ts
  • container/Container.ts にDI登録
  • server.ts にルート追加
  • config/swagger.ts にAPI定義追加

Naming Conventions

種類 命名規則
エンティティ PascalCase Order, MenuItem
リポジトリIF PascalCase + Repository OrderRepository
リポジトリ実装 DynamoDB + PascalCase + Repository DynamoDBOrderRepository
ユースケース PascalCase + UseCase CreateOrderUseCase
コントローラー PascalCase + Controller OrderController
ルート camelCase + Routes orderRoutes
DTO PascalCase + Dto CreateOrderDto

Didn't find tool you were looking for?

Be as detailed as possible for better results