# jfoundry
**Repository Path**: huahill/jfoundry
## Basic Information
- **Project Name**: jfoundry
- **Description**: jfoundry is a practical DDD framework for Java, built on jMolecules and designed for Hexagonal Architecture and Onion Architecture. | jfoundry 是一个面向 Java 的可落地 DDD 开发框架,基于 jMolecules 构建,适用于六边形架构和洋葱架构。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-10-19
- **Last Updated**: 2026-10-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# jfoundry
中文 | [English](README.md)
---
`jfoundry` 是一个面向 Java 的可落地 DDD 开发框架,基于 jMolecules 构建,适用于 Hexagonal Architecture(六边形架构)和 Onion Architecture(洋葱架构)。
它让业务项目能将领域建模、架构边界和可靠集成落实为代码。核心定义 DDD 概念、架构语义、应用层契约、领域事件、持久化 SPI 和消息 SPI,不依赖特定运行时框架。Spring、Quarkus 与 Helidon 通过平级运行时集成模块装配同一套核心能力。
JFoundry 不是完整的业务应用框架,也不要求应用引入全部模块。它是一个可组合的能力平台:应用按需选择 DDD、持久化、消息、可靠集成和运行时能力,而具体框架适配器始终位于运行时无关核心之外。
## 为什么是 jfoundry
很多 DDD 项目会在实现中失去原有边界:领域代码引入框架或 ORM API,事务归属不清,Repository 演变为通用查询接口,外部事件也无法可靠投递。`jfoundry` 提供:
- 基于 jMolecules 的 DDD、Hexagonal、Onion 和 CQRS 语义。
- 领域、应用、基础设施与运行时集成之间明确的依赖方向。
- 将架构约束变为可执行测试的 ArchUnit 规则。
- 用于持久化、消息传输、可靠消息、事务和运行时装配的可选生产能力。
## 架构
领域模型不依赖 Spring、ORM、HTTP、消息代理或数据库客户端。应用层契约编排用例并定义能力 SPI;基础设施实现技术适配器;运行时集成负责装配。
```text
运行时集成
-> 应用层 / 基础设施适配器
-> 应用层契约
-> 领域
```
依赖方向始终指向内层。因此运行时集成位于核心之外,而不是每个应用的必需依赖。
领域事件与 Outbox 是相互独立的能力:进程内领域事件派发不需要 Outbox,通用 Outbox 也不需要领域事件。
只有在需要可靠地将领域事件外部化时,应用才选择显式的领域事件 Outbox 组合;可选的持久化桥接层负责保持聚合事件自动收集的便利性,
同时避免通用持久化与领域事件耦合。
在仓库结构中,`jfoundry-core/` 归集运行时无关模块,`jfoundry-runtime/` 归集 Spring、Quarkus 和 Helidon 集成,`jfoundry-boms/` 提供依赖管理。这些目录是源码分组,不是 Maven 聚合模块。模块数量反映了“能力”和“运行时或实现”两个独立维度,并不意味着应用需要依赖整个仓库。

## AI 辅助架构工作流
[`domain-architecture-skills`](https://github.com/xfoundries/domain-architecture-skills) 是
JFoundry 在设计期的配套插件。用户无需预先选择架构风格:`$domain-architecture-workflow` 会从需求出发完成领域建模,
再依据已确认的业务需求、外部边界和项目约束判断是否需要完整架构风格;需要时,由工作流在
[Hexagonal 与 Onion](docs/i18n/zh/framework/architecture-styles.md) 之间作出选择,随后才将决策映射为 JFoundry 模块和
ArchUnit 规则。CQRS 仍是按需使用的局部模式。
仅当项目选择 JFoundry 后,插件才进入框架落地。它需要独立安装,不是运行时依赖。
与 JFoundry 配合使用的验证证据和边界见[采用就绪度与已验证范围](docs/i18n/zh/integration/adoption-readiness.md)。
### 查看端到端示例
可直接查看 [jfoundry 费用报销审批 Demo](https://github.com/xfoundries/jfoundry-expense-approval-demo)。
这是一个端到端参考项目:它以刻意简化的业务领域验证完整的架构和集成链路,并持续维护 Hexagonal
与 Onion Simple 两个变体。
```text
需求 -> 领域建模 -> 架构决策 -> 可选的 jfoundry 落地 -> 实施交接
```
## 能力概览
| 范畴 | 能力 |
|------|------|
| 领域建模 | 聚合、值对象、领域事件、Repository 契约和领域异常 |
| 架构 | Hexagonal 和 Onion 语义,以及 ArchUnit 规则 |
| 应用层 | 应用服务、事务边界、CQRS 和领域事件编排 |
| 持久化 | 聚合持久化契约,以及 MyBatis-Plus 和 JPA 实现 |
| Web | 面向 Spring MVC、Quarkus REST 和 Helidon MP JAX-RS 的 RFC 9457 Problem Details 与安全 HTTP 诊断日志,以及 Spring 和 MicroProfile REST Client 日志 |
| 消息传输 | 运行时无关的出站传输契约,以及显式选择的 Kafka、RabbitMQ、RocketMQ 适配器 |
| 可靠消息 | Transactional Outbox、Inbox 幂等、消息和序列化 SPI |
| 运行时集成 | Spring Framework 与 Spring Boot 装配;Quarkus 与 Helidon 的 CDI/Jakarta Transactions、JPA 与 Outbox/Inbox 装配 |
## 能力组合
JFoundry 的能力可以独立选择。一个典型应用通常只选择适合自己的路径,而不是引入整个项目:
| 需求 | 典型组合 |
|------|----------|
| DDD 建模与架构约束 | 领域与架构能力 |
| 进程内领域事件 | 领域事件能力,不要求 Outbox |
| 通用可靠消息 | Outbox 或 Inbox 能力,再选择存储、传输和序列化适配器 |
| 领域事件可靠外部化 | 领域事件 + Outbox 组合;需要自动收集聚合事件时,再添加可选的持久化桥接层 |
| 聚合持久化 | 持久化契约,以及 JPA 或 MyBatis-Plus 实现 |
| 运行时装配 | 对应的 Spring、Quarkus 或 Helidon 集成 |
这种组合方式保持了默认接入的轻量,同时允许应用在明确选择后获得面向生产的可靠集成能力。
## 选择路径
- **选择能力**:先从[能力目录](docs/i18n/zh/capabilities/index.md)开始,将业务需求映射到受支持运行时的依赖入口。
- **架构与建模**:从[接入指南](docs/i18n/zh/integration/getting-started.md)开始,选择[架构风格](docs/i18n/zh/framework/architecture-styles.md),并阅读[建模约定](docs/i18n/zh/modeling/index.md)。
- **聚合持久化**:先阅读[聚合持久化](docs/i18n/zh/capabilities/aggregate-persistence.md),再选择适合项目的平级实现:[MyBatis-Plus](docs/i18n/zh/implementations/mybatis-plus.md) 或 [JPA](docs/i18n/zh/implementations/jpa.md)。
- **Web**:先阅读[Web](docs/i18n/zh/capabilities/web.md),再选择 RFC 9457 Problem Details 或运行时专属的 HTTP 服务端与 REST Client 诊断日志。
- **消息传输**:通过[消息传输](docs/i18n/zh/capabilities/message-delivery.md)选择直接使用的 Kafka、RabbitMQ、RocketMQ 或应用自有传输适配器。
- **Spring Boot + MyBatis-Plus(常用组合)**:先完成 [Spring Boot 运行时装配](docs/i18n/zh/implementations/spring-boot.md),再接入 [MyBatis-Plus](docs/i18n/zh/implementations/mybatis-plus.md) 聚合持久化;这是一条常见接入路径,不改变 JPA 的同等支持地位。
- **可靠消息**:先阅读[可靠消息](docs/i18n/zh/capabilities/reliable-messaging.md),再从对应的 [MyBatis-Plus](docs/i18n/zh/implementations/mybatis-plus.md) 或 [JPA](docs/i18n/zh/implementations/jpa.md) 指南中选择其存储实现。
- **Spring Boot**:通过 [Spring Boot 运行时装配](docs/i18n/zh/implementations/spring-boot.md) 使用启动器与条件化自动配置组装已选择的能力;其属性、条件与 Bean 优先级见 [Spring Boot 自动配置参考](docs/i18n/zh/reference/spring-boot-autoconfiguration.md)。
- **Quarkus**:通过 [Quarkus 运行时集成](docs/i18n/zh/implementations/quarkus.md) 使用显式扩展组合接入 CDI 事务、Problem Details 与 HTTP 日志、领域事件分发、基于 JPA 的可靠消息、Kafka 与 RabbitMQ 投递并验证原生镜像。
- **Helidon MP**:通过 [Helidon MP 运行时集成](docs/i18n/zh/implementations/helidon.md) 显式组合 CDI/JTA、JPA、Outbox/Inbox、Kafka 与 RabbitMQ 投递、Problem Details 与 HTTP 日志。其原生镜像当前验证 CDI/Web;Helidon Narayana JTA 的原生执行仍是上游实验性能力。
## 最小接入
所有应用都引入运行时无关 BOM,再只添加应用需要的启动器与能力实现。Spring Boot、Quarkus 与 Helidon 应用还要额外引入各自的运行时 BOM;运行时 BOM 只管理平台生态版本,不能替代 JFoundry BOM。
```xml
io.github.xfoundries
jfoundry-dependencies
${jfoundry.version}
pom
import
```
## 领域模型示例
```java
// Money.java
import org.jfoundry.domain.valueobject.ValueObject;
import java.math.BigDecimal;
public record Money(BigDecimal amount, String currency) implements ValueObject {
}
```
```java
// OrderId.java
import org.jmolecules.ddd.types.Identifier;
public record OrderId(String value) implements Identifier {
}
```
```java
// Order.java
import org.jfoundry.domain.entity.agg.BaseAggregateRoot;
public final class Order extends BaseAggregateRoot {
private Money total;
public Order(OrderId id, Money total) {
super(id);
this.total = total;
}
public void changeTotal(Money total) {
this.total = total;
}
}
```
## 文档
### 快速开始
- [接入指南](docs/i18n/zh/integration/getting-started.md)
- [采用就绪度与已验证范围](docs/i18n/zh/integration/adoption-readiness.md)
- [发布支持策略](docs/release/support-policy.md)
- [供应链安全](docs/release/supply-chain-security.md)
- [`domain-architecture-skills`](https://github.com/xfoundries/domain-architecture-skills)
### 能力
- [能力目录](docs/i18n/zh/capabilities/index.md)
- [聚合持久化](docs/i18n/zh/capabilities/aggregate-persistence.md)
- [Web](docs/i18n/zh/capabilities/web.md)
- [消息传输](docs/i18n/zh/capabilities/message-delivery.md)
- [可靠消息:Outbox 与 Inbox](docs/i18n/zh/capabilities/reliable-messaging.md)
- [应用事务](docs/i18n/zh/capabilities/application-transactions.md)
- [分布式锁](docs/i18n/zh/capabilities/distributed-locks.md)
### 持久化实现
- [MyBatis-Plus](docs/i18n/zh/implementations/mybatis-plus.md)
- [JPA](docs/i18n/zh/implementations/jpa.md)
### 运行时集成
- [Spring Boot 运行时装配](docs/i18n/zh/implementations/spring-boot.md)
- [Quarkus 运行时集成](docs/i18n/zh/implementations/quarkus.md)
- [Helidon MP 运行时集成](docs/i18n/zh/implementations/helidon.md)
### 框架语义
- [架构风格指南](docs/i18n/zh/framework/architecture-styles.md)
- [ArchUnit 架构规则](docs/i18n/zh/framework/archunit-rules.md)
- [框架边界设计](docs/i18n/zh/framework/framework-boundaries.md)
### 建模
- [建模](docs/i18n/zh/modeling/index.md)
- [值对象规范](docs/i18n/zh/modeling/value-object.md)
- [领域事件](docs/i18n/zh/modeling/domain-event.md)
- [Repository 与读侧契约迁移指南](docs/i18n/zh/modeling/repository-vs-read-contracts.md)
### 发布与兼容
- [兼容性矩阵](docs/release/compatibility.md)
- [发布到 Maven Central](docs/release/maven-central.md)
- [原生镜像验证状态](docs/i18n/zh/integration/adoption-readiness.md):应结合[兼容性矩阵](docs/release/compatibility.md)查看已按运行时与能力划定的验证证据,不能据此推定所有组件均受支持。
完整文档结构见[中文文档索引](docs/i18n/zh/index.md)。
## 构建
```bash
./mvnw validate
./mvnw test
./mvnw clean install
```
## 许可证
[Apache License 2.0](LICENSE)