AgentSkillsCN

ddd

运用领域驱动设计方法,对复杂业务领域进行建模与架构设计。 在以下场景中使用此技能:(1) 当你需要深入理解复杂的业务领域时;(2) 当你希望识别系统的限界上下文时;(3) 当你需要构建一套通用的领域语言时;(4) 当你需要对实体与聚合根进行建模时;(5) 当你需要按照“整洁架构”原则组织代码结构时。

SKILL.md
--- frontmatter
name: ddd
description: |
  Domain-Driven Design - Modélisation métier et conception de domaines complexes.
  Utilise ce skill quand: (1) tu dois comprendre un domaine métier complexe,
  (2) tu veux identifier les bounded contexts d'un système, (3) tu dois créer
  un ubiquitous language partagé, (4) tu veux modéliser des entités et agrégats,
  (5) tu dois structurer du code selon Clean Architecture.
metadata:
  version: 1.0.0
  status: active
  level: transversal
  domains:
    - strategic
    - tactical
    - tooling
    - templates
    - case-studies
    - integrations

Domain-Driven Design (DDD)

Philosophie

Le DDD est une approche de conception logicielle qui place le domaine métier au centre de toutes les décisions. Ce skill guide la découverte, la modélisation et l'implémentation de domaines complexes.

Principes fondamentaux

  1. Le métier d'abord : Le code doit refléter fidèlement le domaine métier
  2. Langage ubiquitaire : Un vocabulaire partagé entre développeurs et experts métier
  3. Bounded Contexts : Des frontières claires entre sous-domaines
  4. Modèle riche : La logique métier vit dans le domaine, pas dans les services

Ce que ce skill fait

  • Accompagne la découverte d'un domaine métier via Event Storming, Domain Storytelling, Example Mapping
  • Aide à identifier et délimiter les Bounded Contexts
  • Guide la création d'un Ubiquitous Language
  • Modélise les Entities, Value Objects, Aggregates
  • Structure le code selon Clean Architecture

Ce que ce skill NE fait PAS

  • Refactoring de legacy (→ skill dédié legacy-modernization)
  • Implémentation technique bas niveau (→ backend-developer)
  • Tests et validation (→ testing-process)
  • Choix d'infrastructure (→ devops)

Architecture du Skill

code
ddd/
├── SKILL.md (ce fichier)
└── agents/
    ├── strategic/          # POURQUOI & QUOI - Niveau conceptuel (8 agents)
    │   ├── orchestrator.md
    │   ├── bounded-contexts.md
    │   ├── context-mapping.md
    │   ├── ubiquitous-language.md
    │   ├── core-domain-identification.md
    │   ├── event-storming.md
    │   ├── domain-storytelling.md
    │   └── example-mapping.md
    │
    ├── tactical/           # COMMENT - Niveau implémentation (17 agents)
    │   ├── orchestrator.md
    │   ├── entities.md
    │   ├── value-objects.md
    │   ├── aggregates.md
    │   ├── repositories.md
    │   ├── domain-services.md
    │   ├── domain-events.md
    │   ├── domain-errors.md
    │   ├── factories.md
    │   ├── specifications.md
    │   ├── domain-primitives.md
    │   ├── application-services.md
    │   ├── anti-corruption-layer.md
    │   ├── cqrs.md
    │   ├── event-sourcing.md
    │   ├── saga-process-manager.md
    │   └── clean-architecture.md
    │
    ├── tooling/            # OUTILS - Validation et qualité (3 agents)
    │   ├── model-validator.md
    │   ├── pattern-selector.md
    │   └── performance-guide.md
    │
    ├── templates/          # SCAFFOLDING - Templates de code (3 agents)
    │   ├── aggregate-template.md
    │   ├── value-object-template.md
    │   └── repository-template.md
    │
    ├── case-studies/       # EXEMPLES - Cas d'usage complets (2 agents)
    │   ├── e-commerce-domain.md
    │   └── anemic-to-rich-migration.md
    │
    └── integrations/       # INTÉGRATIONS - Frameworks (1 agent)
        └── nextjs-integration.md

Domaines et Agents

Strategic (Niveau conceptuel) - 8 agents

AgentResponsabilité
orchestratorRoute vers l'agent strategic approprié
bounded-contextsIdentifier et délimiter les contextes bornés
context-mappingDéfinir les relations entre contextes (Shared Kernel, ACL, etc.)
ubiquitous-languageConstruire le vocabulaire partagé équipe/métier
core-domain-identificationClassifier Core / Supporting / Generic domains
event-stormingFaciliter les ateliers de découverte par événements
domain-storytellingNarration visuelle des processus métier
example-mappingDécouverte par exemples et règles métier (Given-When-Then)

Tactical (Niveau implémentation) - 17 agents

AgentResponsabilité
orchestratorRoute vers l'agent tactical approprié
entitiesModéliser les entités avec identité et comportement
value-objectsCréer des objets valeur immuables
aggregatesDéfinir les agrégats, racines et invariants
repositoriesConcevoir les interfaces de persistance
domain-servicesImplémenter la logique métier transverse
domain-eventsModéliser les événements du domaine
domain-errorsGestion des erreurs métier typées (Result, Either)
factoriesEncapsuler la création complexe d'agrégats
specificationsRègles métier composables et réutilisables
domain-primitivesTypes primitifs typés (IDs, Email, Money...)
application-servicesUse Cases et orchestration applicative
anti-corruption-layerProtéger le domaine des modèles externes/legacy
cqrsSéparer les modèles de lecture et d'écriture
event-sourcingStocker l'état comme séquence d'événements
saga-process-managerOrchestrer les processus multi-agrégats longs
clean-architectureStructurer le code en couches concentriques

Tooling (Outils) - 3 agents

AgentResponsabilité
model-validatorAuditer un modèle DDD, détecter les anti-patterns
pattern-selectorAider à choisir le bon pattern selon le contexte
performance-guideOptimisation performance (snapshots, aggregate sizing)

Templates (Scaffolding) - 3 agents

AgentResponsabilité
aggregate-templateTemplate complet pour créer un Aggregate
value-object-templateTemplates de Value Objects (Money, Email, Address...)
repository-templateTemplate interface + implémentation Repository

Case Studies (Exemples) - 2 agents

AgentResponsabilité
e-commerce-domainCas complet e-commerce (Event Storming → Code)
anemic-to-rich-migrationGuide migration modèle anémique → Rich Domain

Integrations (Frameworks) - 1 agent

AgentResponsabilité
nextjs-integrationIntégration DDD avec Next.js App Router

Table de Routage

Routage Principal (Strategic vs Tactical)

Mots-clésDomaineAgent par défaut
bounded context, sous-domaine, frontière, périmètrestrategicbounded-contexts
context map, relation, upstream, downstream, ACLstrategiccontext-mapping
vocabulaire, glossaire, terme, langage, ubiquitousstrategicubiquitous-language
core domain, supporting, generic, priorisation, valeur stratégiquestrategiccore-domain-identification
event storming, atelier, sticky, événement métierstrategicevent-storming
storytelling, processus, narration, pictogrammestrategicdomain-storytelling
example mapping, user story, règle, exemple, cas limitestrategicexample-mapping
entity, entité, identité, cycle de vietacticalentities
value object, valeur, immuable, égalité structurelletacticalvalue-objects
aggregate, agrégat, racine, invariant, consistancetacticalaggregates
repository, persistance, collection, stockagetacticalrepositories
domain service, service métier, logique transversetacticaldomain-services
domain event, événement, notification, réactiontacticaldomain-events
factory, création, construction, instanciationtacticalfactories
specification, règle métier, critère, filtre, policytacticalspecifications
domain primitive, type, typage, id, email, moneytacticaldomain-primitives
application service, use case, command, query, orchestrationtacticalapplication-services
anti-corruption layer, ACL, legacy, traduction, isolation, externetacticalanti-corruption-layer
cqrs, command, query, read model, projection, séparation lecture écrituretacticalcqrs
event sourcing, event store, replay, snapshot, historique, audit trailtacticalevent-sourcing
saga, process manager, compensation, transaction distribuée, workflow longtacticalsaga-process-manager
clean architecture, couche, layer, adapter, porttacticalclean-architecture
error, exception, domain error, result, either, validation errortacticaldomain-errors
audit, validation, anti-pattern, qualité, review, santé modèletoolingmodel-validator
quel pattern, choisir, décision, trade-off, comparaison, recommandationtoolingpattern-selector
performance, optimisation, snapshot, aggregate size, scalingtoolingperformance-guide
template, scaffolding, générer, boilerplate, startertemplatesaggregate-template
créer aggregate, structure aggregatetemplatesaggregate-template
créer value object, template votemplatesvalue-object-template
template repository, persistence, mappertemplatesrepository-template
case study, exemple complet, end-to-end, e-commercecase-studiese-commerce-domain
migration, anemic, rich domain, refactoring legacy, stranglercase-studiesanemic-to-rich-migration
nextjs, next.js, app router, server actions, api routesintegrationsnextjs-integration

Routage par Phase de Projet

PhaseAgents recommandés
Découverte initialeevent-storming → domain-storytelling → ubiquitous-language
Priorisationcore-domain-identification
Délimitationbounded-contexts → context-mapping
Spécificationexample-mapping → ubiquitous-language
Modélisationdomain-primitives → entities → value-objects → aggregates
Patterns de basefactories → specifications → domain-events
Architectureclean-architecture → repositories → application-services
Patterns avancéscqrs → event-sourcing → saga-process-manager
Intégration externeanti-corruption-layer → context-mapping
Aide à la décisionpattern-selector
Audit & Qualitémodel-validator

Workflow Recommandé

code
┌─────────────────────────────────────────────────────────────────┐
│                        DÉCOUVERTE                                │
│  ┌─────────────┐    ┌──────────────┐    ┌─────────────────┐     │
│  │   Event     │───▶│   Domain     │───▶│    Example      │     │
│  │  Storming   │    │ Storytelling │    │    Mapping      │     │
│  └─────────────┘    └──────────────┘    └─────────────────┘     │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                      STRUCTURATION                               │
│  ┌─────────────┐    ┌──────────────┐    ┌─────────────────┐     │
│  │  Bounded    │───▶│   Context    │───▶│   Ubiquitous    │     │
│  │  Contexts   │    │   Mapping    │    │    Language     │     │
│  └─────────────┘    └──────────────┘    └─────────────────┘     │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                      MODÉLISATION                                │
│  ┌─────────────┐    ┌──────────────┐    ┌─────────────────┐     │
│  │  Entities   │───▶│    Value     │───▶│   Aggregates    │     │
│  │             │    │   Objects    │    │                 │     │
│  └─────────────┘    └──────────────┘    └─────────────────┘     │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                     IMPLÉMENTATION                               │
│  ┌─────────────┐    ┌──────────────┐    ┌─────────────────┐     │
│  │   Clean     │───▶│ Repositories │───▶│    Domain       │     │
│  │Architecture │    │              │    │   Services      │     │
│  └─────────────┘    └──────────────┘    └─────────────────┘     │
└─────────────────────────────────────────────────────────────────┘

Méthode de Découverte

Quand un utilisateur demande de modéliser un domaine, proposer le choix :

Quelle méthode de découverte préfères-tu ?

  1. Event Storming - Idéal pour découverte globale, équipes nombreuses
  2. Domain Storytelling - Idéal pour communication avec métiers, documentation
  3. Example Mapping - Idéal pour user stories, règles précises, cas limites

Livrables

LivrableFormatAgent source
Context MapDiagramme Mermaid/PlantUMLcontext-mapping
Glossaire Ubiquitous LanguageMarkdown tableubiquitous-language
Event Storming BoardMarkdown structuréevent-storming
Modèle de domaineCode + diagrammeaggregates
Structure Clean ArchitectureArborescence de dossiersclean-architecture

Redirections vers autres Skills

SituationSkill cible
Implémentation API/code détaillébackend-developer
Tests unitaires/intégrationtesting-process
Refactoring de legacylegacy-modernization
Décisions d'infrastructuredevops
Architecture technique globaledirection-technique

Exemples d'Utilisation

Exemple 1 : Découverte d'un nouveau domaine

code
User: Je dois modéliser un système de réservation de salles

DDD Skill:
1. Propose Event Storming pour découvrir les événements métier
2. Identifie les Bounded Contexts (Réservation, Salles, Utilisateurs, Facturation)
3. Construit le Context Map et l'Ubiquitous Language
4. Modélise les Aggregates (Reservation, Room, TimeSlot)

Exemple 2 : Modélisation tactique

code
User: Comment structurer mon agrégat Commande ?

DDD Skill (tactical/aggregates):
1. Identifie la racine d'agrégat (Order)
2. Définit les entités enfants (OrderLine)
3. Crée les Value Objects (Money, Address, OrderStatus)
4. Établit les invariants métier
5. Propose la structure Clean Architecture