搜索你想找的开源项目

输入名称、用途或关键词,也可粘贴 GitHub 仓库链接

分享到微信

当前解读页的微信分享二维码

用微信扫一扫打开,点击右上角「···」分享给朋友或朋友圈。

手机上可截屏后,在微信扫一扫中从相册识别二维码。

ddd-by-examples/library

学习资源

用 Java 和 Spring Boot 把 Event Storming 到战术模式的 DDD 实践完整落成可运行示例。

5,993
845
Java
MIT
创建于 7 年前

项目介绍

这是一个以公共图书馆业务为背景的 DDD 教学项目,重点不在做成生产系统,而在于展示如何从领域描述出发,经过 Big Picture EventStorming、Example Mapping 和 Design Level EventStorming,再把结果落成模块化单体代码。项目划分出 catalogue 和 lending 两个限界上下文:前者接近 CRUD,后者承载真实业务逻辑并采用六边形架构(项目说明)。

lending 模型包含借阅占位、借出、受限图书、普通读者与研究者读者、逾期上限和每日清单等规则。代码演示了多种战术模式:聚合之间通过事件通信,并同时给出即时一致性与最终一致性两种实现和测试;领域对象不可变;纯函数在领域层声明、在基础设施层实现;用 AvailableBook、BookOnHold、CheckedOutBook 等类型表达状态;用 Vavr 的 Option、Either、Try 和模式匹配处理可选值、分支与异常;持久化使用原生 SQL、JdbcTemplate 和 Spring Data JDBC,而不使用 JPA。ArchUnit 测试守住包边界,Groovy 用 BDD 方式和领域 DSL 编写测试(设计取舍)。

适合已经熟悉 Spring、希望把 DDD 概念对应到具体代码的 Java 开发者,也适合正在讨论限界上下文、聚合一致性或函数式领域建模的团队。

快速使用

需要 Java 11 和 Maven(构建说明)。

在仓库根目录直接启动应用:

$ mvn spring-boot:run

内嵌 Tomcat 会在 8080 端口启动,上下文路径为空。若要生成 jar:

$ mvn clean package

随后构建并运行容器:

$ docker build -t spring/library .
$ docker run -ti --rm --name spring-library -p 8080:8080 spring/library

需要指标时,执行 docker-compose up 会同时启动应用、Prometheus 和 Grafana。应用通过 http://localhost:8080/actuator/prometheus 暴露 Micrometer 指标,Prometheus 在 9090 端口,Grafana 在 3000 端口;应用使用 local Spring profile 加载初始数据(监控配置)。

使用约束

  • 构建目标为 Java 11 和 Maven,README 未说明对更新 JDK 的支持情况。
  • 项目明确处于持续建设中,API 和模型代码可能变化。
  • 领域模型为教学目的做了简化,不是完整的图书馆借阅实现。
  • Spring 仅出现在基础设施层,每个上下文有独立的应用上下文;虽然示例混用了原生 SQL 与 Spring Data JDBC,README 建议同一应用或团队只保留一种持久化方案。
  • 许可证为 MIT。

HotRepo 点评

仓库记录为 5,992 Star、845 Fork,在 2026-11-08 的 Java 日榜快照中新增 11 Star,位列第 10;未记录到全语言日榜名次,因此现有数据更像一个稳定的参考项目,而不是短期爆发的趋势项目。对学习型仓库而言这很合理:它的价值在于从 Event Storming 记录、架构约束到可测试代码的完整串联,而 Java 榜上的可见性说明仍有开发者在查找 Spring 项目中的 DDD 实践。

本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。