# DDD **Repository Path**: PC888/ddd ## Basic Information - **Project Name**: DDD - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-08 - **Last Updated**: 2026-05-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🏗️ DDD 电商示例项目 > 一个基于领域驱动设计 (Domain-Driven Design) 的电商订单系统示例,专为 DDD 入门学习者设计。 [![Java](https://img.shields.io/badge/Java-17+-orange.svg)](https://openjdk.org/) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.3-green.svg)](https://spring.io/projects/spring-boot) [![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) ## 🎯 项目目标 本项目旨在通过一个**简洁但完整**的电商订单系统,帮助开发者理解 DDD 的核心概念: - ✅ 战略设计(限界上下文、通用语言) - ✅ 战术设计(实体、值对象、聚合根、领域服务、领域事件) - ✅ 充血模型 vs 贫血模型 - ✅ 分层架构(六边形架构) - ✅ Repository 模式 ## 📁 项目结构 ``` src/main/java/top/ivivi/ ├── shared/ ← 🔷 Shared Kernel(公共内核) │ ├── domain/ │ │ ├── base/ ← 基础抽象(AggregateRoot, BaseEntity) │ │ └── valueobject/ ← 通用值对象(Money) │ └── response/ ← 统一响应格式 │ ├── order/ ← 🟢 订单子领域 │ ├── interfaces/ ← 接口层(REST Controller) │ ├── application/ ← 应用层(用例编排) │ ├── domain/ ← 领域层(核心业务逻辑) │ │ ├── aggregate/ ← 聚合根(Order) │ │ ├── entity/ ← 内部实体(OrderItem) │ │ ├── valueobject/ ← 值对象(OrderId, Address) │ │ ├── event/ ← 领域事件(OrderCreatedEvent) │ │ ├── service/ ← 领域服务(DiscountCalculator) │ │ └── repository/ ← 仓储接口 │ └── infrastructure/ ← 基础设施层(JPA 实现) │ └── catalog/ ← 🟡 商品子领域(演示多上下文) └── domain/ ``` ## 🚀 快速开始 ### 前提条件 - JDK 17+ - Maven 3.6+ ### 运行项目 ```bash # 克隆项目 git clone https://github.com/your-username/ddd-demo.git cd ddd-demo # 使用 Maven 运行 ./mvnw spring-boot:run ``` ### 访问入口 | 入口 | URL | |:-----|:----| | Swagger UI | http://localhost:8080/swagger-ui.html | | H2 Console | http://localhost:8080/h2-console | | API Docs | http://localhost:8080/v3/api-docs | > H2 Console 连接信息:JDBC URL = `jdbc:h2:mem:ddd-demo`, User = `sa`, Password = 空 ## 📚 学习资源 本项目附带两份详细文档: | 文档 | 内容 | |:-----|:-----| | [DDD_GUIDE.md](DDD_GUIDE.md) | DDD 完整指南,包含概念讲解 + 代码对照 | | [DDD_100_FAQ.md](DDD_100_FAQ.md) | DDD 灵魂 100 问,从入门到精通的 Q&A | ## 🔑 核心代码示例 ### 值对象 (Value Object) ```java // Money.java - 不可变、通过值比较 public class Money { private final BigDecimal amount; // final = 不可变 public Money add(Money other) { return new Money(this.amount.add(other.amount)); // 返回新对象 } } ``` ### 聚合根 (Aggregate Root) ```java // Order.java - 聚合的入口和守护者 public class Order extends AggregateRoot { private List orderItems; // 内部实体 public void addOrderItem(...) { // 通过聚合根操作内部实体 OrderItem item = OrderItem.create(...); orderItems.add(item); recalculateTotalAmount(); // 自动维护一致性 } } ``` ### 领域服务 (Domain Service) ```java // DiscountCalculator.java - 跨实体的业务逻辑 public class DiscountCalculator { public Money calculate(Order order) { if (order.isVipOrder()) { return order.getTotalAmount().multiply(new BigDecimal("0.1")); } return Money.ZERO; } } ``` ## 🏛️ 架构原则 ``` 依赖方向:外层 → 内层 Interface Layer (Controller) ↓ Application Layer (Use Case) ↓ Domain Layer (核心业务) ← Infrastructure Layer ↑ Domain 层是核心,不依赖任何外部框架! ``` ## 📝 设计决策 | 决策 | 选择 | 原因 | |:-----|:-----|:-----| | ID 类型 | String (UUID) | 避免数据库依赖,便于分布式 | | 持久化 | JPA + H2 | 演示目的,生产可换 MySQL | | 事件机制 | 同步 + 内存 | 简化演示,生产可接 MQ | | 工厂模式 | 静态工厂方法 | 简单场景足够 | ## 🤝 贡献 欢迎提交 Issue 和 PR! ## 📖 推荐阅读 - 《领域驱动设计》Eric Evans (蓝皮书) - 《实现领域驱动设计》Vaughn Vernon (红皮书) - 《领域驱动设计精粹》Vaughn Vernon (绿皮书) ## 📄 License MIT License