返回 Skill 列表
extension
分类: AI Agent 能力无需 API Key

ddd-planning

领域驱动设计的策划与设计专业技能。支持DDD整个流程,包括项目领域分析、定义限界上下文、聚合设计、上下文映射、事件风暴、定义通用语言等。使用时机:(1) 请求进行DDD策划/设计时 (2) 请求进行领域建模时 (3) 设计限界上下文、聚合、领域事件时 (4) 从界面定义书/数据库定义书中提取领域时 (5) 编写上下文地图时 (6) 生成Kotlin DDD代码时

person作者: jakexiaohubgithub

DDD Planning

Overview

이 skill은 Domain-Driven Design(DDD) 방법론으로 프로젝트를 기획하고 설계합니다. 기존 문서(화면정의서, DB정의서, 기획서)를 분석하여 도메인을 추출하고, DDD 산출물을 생성합니다.

Workflow

Phase 1: 도메인 분석

기존 문서를 분석하여 도메인을 추출합니다.

  1. 문서 읽기: 화면정의서, DB정의서, 기획서 읽기
  2. 도메인 식별: 비즈니스 기능별 도메인 추출
  3. 용어 수집: 도메인 용어 수집 (Ubiquitous Language 초안)

Phase 2: Strategic Design

전략적 설계를 수행합니다. 자세한 가이드는 references/strategic-design.md 참고.

  1. 도메인 분류: Core / Supporting / Generic 분류
  2. Bounded Context 정의: Context 경계와 책임 정의
  3. Context Mapping: Context 간 관계와 통합 패턴 정의
  4. Ubiquitous Language: Context별 용어집 작성

산출물:

  • assets/templates/bounded-context.md 사용
  • assets/templates/context-map.md 사용
  • assets/templates/ubiquitous-language-glossary.md 사용

Phase 3: Tactical Design

전술적 설계를 수행합니다. 자세한 가이드는 references/tactical-design.md 참고.

  1. Aggregate 식별: 트랜잭션 경계와 불변식 정의
  2. Entity/Value Object 분류: 식별자 필요성과 가변성 기준
  3. Domain Event 정의: 중요 비즈니스 사건 정의
  4. Repository 인터페이스: Aggregate별 Repository 정의

산출물:

  • assets/templates/aggregate-design.md 사용
  • assets/templates/domain-model.md 사용

Phase 4: Event Storming (선택)

Event Storming 워크숍을 수행합니다. 가이드는 references/event-storming.md 참고.

산출물:

  • assets/templates/event-storming-result.md 사용

Phase 5: 코드 생성

Kotlin DDD 보일러플레이트를 생성합니다.

템플릿 위치: assets/kotlin-ddd/

  • Aggregate.kt: Aggregate Root 패턴
  • Entity.kt: Entity 패턴
  • ValueObject.kt: Value Object 패턴
  • DomainEvent.kt: Domain Event 패턴
  • Repository.kt: Repository 인터페이스 패턴
  • DomainService.kt: Domain Service 패턴

Phase 6: 문서 반영

설계 결과를 기존 프로젝트 문서에 반영합니다.

  1. 기획서에 도메인 모델 섹션 추가
  2. DB정의서와 도메인 모델 정합성 확인
  3. 화면정의서와 Bounded Context 매핑

Quick Reference

도메인 분류 기준

| 분류 | 특징 | 전략 | |------|------|------| | Core | 비즈니스 차별화 요소, 복잡한 로직 | 직접 개발, 최우선 투자 | | Supporting | Core 지원, 중간 복잡도 | 직접 개발 또는 커스터마이징 | | Generic | 범용 기능, 비즈니스 특화 없음 | 외부 서비스/라이브러리 |

Context Mapping 패턴

| 패턴 | 설명 | 사용 시기 | |------|------|----------| | OHS | Open Host Service | 여러 Consumer 대응 | | PL | Published Language | OHS와 함께, 공통 언어 | | ACL | Anti-Corruption Layer | 레거시/외부 연동 | | CS | Customer-Supplier | Upstream이 협조적 | | CF | Conformist | Upstream이 비협조적 |

Aggregate 설계 원칙

  1. 작게 유지: 대부분 1개 Entity
  2. ID 참조: Aggregate 간 객체 참조 금지
  3. 트랜잭션 경계: 1 트랜잭션 = 1 Aggregate
  4. 불변식 보호: 비즈니스 규칙은 Aggregate 내부에서

Resources

references/

DDD 개념과 패턴에 대한 가이드 문서입니다.

  • strategic-design.md: Bounded Context, 도메인 분류, Context Mapping
  • tactical-design.md: Aggregate, Entity, Value Object, Domain Event
  • context-mapping-patterns.md: Context Mapping 패턴 상세
  • event-storming.md: Event Storming 프로세스
  • ubiquitous-language.md: 용어집 작성 가이드

assets/templates/

DDD 문서 템플릿입니다. {{PLACEHOLDER}}를 실제 값으로 교체하여 사용합니다.

  • bounded-context.md: Bounded Context 정의서
  • aggregate-design.md: Aggregate 설계서
  • context-map.md: Context Map 문서
  • event-storming-result.md: Event Storming 결과
  • ubiquitous-language-glossary.md: 용어집
  • domain-model.md: 전체 도메인 모델 문서

assets/kotlin-ddd/

Kotlin DDD 코드 보일러플레이트입니다.

  • Aggregate.kt: Aggregate Root 패턴 (팩토리 메서드, 이벤트 발행)
  • Entity.kt: Entity 패턴 (ID 기반 동등성)
  • ValueObject.kt: Value Object 패턴 (불변성, 자가 검증)
  • DomainEvent.kt: Domain Event 패턴 (이벤트 핸들러 포함)
  • Repository.kt: Repository 인터페이스 (페이지네이션 포함)
  • DomainService.kt: Domain Service 패턴 (정책, 계산 서비스)

Usage Examples

도메인 분석 요청

"화면정의서와 DB정의서를 분석해서 도메인을 추출해줘"
"FanPulse 프로젝트의 Bounded Context를 정의해줘"

Strategic Design 요청

"투표 도메인과 커뮤니티 도메인의 Context Map을 그려줘"
"Core/Supporting/Generic 도메인을 분류해줘"

Tactical Design 요청

"투표 Aggregate를 설계해줘"
"멤버십 도메인의 Entity와 Value Object를 정의해줘"
"Domain Event 목록을 만들어줘"

코드 생성 요청

"Vote Aggregate의 Kotlin 코드를 생성해줘"
"VoteRepository 인터페이스를 만들어줘"

문서 생성 요청

"투표 Context의 Bounded Context 정의서를 작성해줘"
"Ubiquitous Language 용어집을 만들어줘"
"전체 도메인 모델 문서를 생성해줘"