Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

euonia-project/euonia-java

Open more actions menu

Repository files navigation

Euonia(Java)

Eunoia —— 源自希腊语 εὔνοια:美好的思维、善意、心态平和。

Euonia 是一个用于构建企业级 Java 应用的开发框架。它将**面向对象可扩展业务架构(OSBA)领域驱动设计(DDD)**理念结合起来,为构建健壮、可维护的业务系统提供完整基础设施。该框架基于 Java 17+,可与 Spring Boot 4.x / Spring Framework 7.x 无缝集成。

Euonia 同时提供 .NET 版本,本仓库为 Java 版本


模块

graph TD
    subgraph "Euonia Java"
        direction TB
        DDD --> Core
        OSBA --> Core
        UoW --> Core
        Pipeline --> Core
        Spring --> Core
        Spring --> UoW
        Spring --> OSBA
        Spring --> Pipeline
        BusAbstract --> Core
        BusCore --> BusAbstract
        BusCore --> Core
        BusCore --> Pipeline
        BusInmemory --> BusAbstract
        BusInmemory --> Core
        BusRabbitmq --> BusAbstract
        BusRabbitmq --> Core
        BusKafka --> BusAbstract
        Sample --> DDD
        Sample --> OSBA
        Sample --> Pipeline
        Sample --> Spring
    end

    style Core fill:#4A90D9,color:#fff
    style DDD fill:#50B86C,color:#fff
    style UoW fill:#1F6FEB,color:#fff
    style OSBA fill:#E8833A,color:#fff
    style Pipeline fill:#E74C3C,color:#fff
    style Spring fill:#2ECC71,color:#fff
    style BusAbstract fill:#F39C12,color:#fff
    style BusCore fill:#E67E22,color:#fff
    style BusInmemory fill:#D35400,color:#fff
    style BusRabbitmq fill:#C0392B,color:#fff
    style BusKafka fill:#8E44AD,color:#fff
    style Sample fill:#9B59B6,color:#fff
Loading

Core(euonia-core)

基础核心库:提供基类、ID 生成、反射工具、元组、HTTP 异常、安全能力与验证注解。

说明
com.euonia.core 统一 ObjectId(支持 Snowflake、UUID、ULID、Random)、SnowflakeIdULIDShortUniqueIdSingleton<T>PriorityQueuePair<L,R>
com.euonia.tuple 不可变强类型元组:SoloDuetTrioQuartetQuintetSextetSeptetOctetNonetDecet
com.euonia.http HTTP 状态异常:BadRequestException(400)、UnauthorizedAccessException(401)、ForbiddenException(403)、ResourceNotFoundException(404)、ConflictException(409)等
com.euonia.security UserPrincipalUserClaimTypesAuthenticationExceptionCredentialExceptionUnauthorizedAccessException
com.euonia.annotation @Required@Validator@Validation —— 字段校验元数据
com.euonia.reflection TypeHelperGenericType<T>@DisplayName

DDD(euonia-domain-driven-design)

领域驱动设计抽象:实体、聚合、值对象、领域事件、命令、应用服务、用例与审计支持。

作用
com.euonia.domain Entity<ID> / EntityBase<ID> 领域实体的接口与抽象基类(含标识)
com.euonia.domain Aggregate<ID> / AggregateBase<ID> 聚合根与领域事件管理(raiseEventclearEventsattachEvents
com.euonia.domain HasDomainEvents 管理领域事件和事件处理器的聚合契约
com.euonia.domain ValueObject<T> 不可变值对象,基于反射实现 equalshashCodecompareTo
com.euonia.domain.event Event / EventBase 核心事件契约:id、sequence、intent、originator 元数据
com.euonia.domain.event DomainEvent / DomainEventBase 领域事件,支持聚合挂载与 EventAggregate 映射
com.euonia.domain.event ApplicationEvent / ApplicationEventBase 应用层(集成)事件基类
com.euonia.domain.event EventAggregate 聚合形态的事件数据:id、eventId、typeName、originator、timestamp、sequence
com.euonia.domain.command Command / CommandBase 命令模式抽象:Command 继承 Unicast(消息总线集成),CommandBase 提供基类实现
com.euonia.domain.auditing @Audited / AuditRecord / AuditStore 领域对象变更审计支持
com.euonia.application ApplicationService / BaseApplicationService 应用服务标记接口与含依赖解析的基类
com.euonia.usecase UseCase<I,O> / UseCasePresenter 输入/输出用例契约与响应式结果发布
com.euonia.usecase UseCaseSuccess / UseCaseFailure 成功与失败输出端口

UoW(euonia-unit-of-work)

Unit of Work 抽象:定义事务边界、提交/回滚生命周期与一致性的持久化编排。

类 / 接口 作用
IUnitOfWork UoW 契约,包含生命周期方法(saveChangescommitrollback
IUnitOfWorkManager 创建并管理当前 UoW 作用域
UnitOfWork 默认 UoW 实现
UnitOfWorkBase 共享事务流程的基类
UnitOfWorkInterceptor 拦截应用流程并附加 UoW 边界
IUnitOfWorkAccessor 访问当前激活的 UoW 上下文

Pipeline(euonia-pipeline)

受 ASP.NET Core 启发的中间件管道框架:统一的 Pipeline<TRequest, TResponse>,支持可链式的行为拼装、委托与依赖注入集成。

接口 / 类 说明
Pipeline<TRequest, TResponse> 管道构建器:通过 use() 链接组件、构建委托并异步执行
PipelineBase<TRequest, TResponse> 抽象基类:组件注册、反向链构建、@PipelineBehaviors 注解支持
PipelineDelegate<TRequest, TResponse> @FunctionalInterfaceCompletionStage<TResponse> invoke(TRequest request)
PipelineBehavior<TRequest, TResponse> 行为接口:CompletionStage<TResponse> handleAsync(TRequest, PipelineDelegate<TRequest, TResponse>)
PipelineFactory / DefaultPipelineFactory 创建 Pipeline<TRequest, TResponse> 的工厂
DefaultPipelineProvider<TRequest, TResponse> 默认实现,通过 ServiceProvider 解析行为(反射或 DI)
@PipelineBehaviors 按上下文类型自动附加行为的注解

关键特性:

  • Fluent API:支持通过 .use() 以 lambda、类或 @PipelineBehaviors 自动发现方式拼装行为
  • 单一 Pipeline<TRequest, TResponse> 同时覆盖即发即忘(Pipeline<Object, Void>)和类型化请求/响应场景
  • 基于委托的组合,采用反向链构建(最内层先执行)
  • ServiceProvider 抽象支持独立运行与 Spring 集成
  • 全链路异步(CompletionStage
// 创建一个管道
Pipeline<Object, Void> pipeline = new DefaultPipelineProvider<>(resolver)
    .use((ctx, next) -> next.invoke(ctx).thenRun(() -> System.out.println("Log: done")))
    .use(LoggingBehavior.class);

// 运行
pipeline.runAsync(new MyContext()).toCompletableFuture().join();

Bus Abstract(euonia-bus-abstract)

消息总线抽象契约层:定义消息信封、上下文、约定、传输策略、注解、抽象传输接口、收件箱/发件箱/死信队列抽象。所有总线模块的扩展基础。依赖 core

核心契约

类 / 接口 作用
MessageEnvelope<T> 信封契约接口(messageId、correlationId、conversationId、requestTrackId、channel、payload)
MessageContext 运行时上下文:消息访问、响应发送(response)、失败通知(failure)、完成回调(complete
MessageContextBase MessageContext 默认实现:基于 SubmissionPublisher 的响应/完成事件流
MessageMetadata 强类型元数据映射(Map<String,Object>),支持 get(key, Class<T>)
MessageHeaders 头信息常量:MESSAGE_IDCORRELATION_IDCONVERSATION_IDCONTENT_TYPEREQUEST_TRACE_IDAUTHORIZATION
HandlerContext 处理器上下文契约:订阅事件、异步调用(handleAsync
HandlerRegistration Record — 不可变注册元组:channel + messageType + handlerType + method
Configurator 全局配置契约:约定构建器、策略构建器(按传输名)、处理器注册列表
Dispatcher 分发器契约:List<String> determine(Class<?>) — 消息类型 → 传输名列表
MessageConventionType 枚举:NONEUNICASTMULTICASTREQUEST
MessageSerializer 消息序列化契约接口

收件箱 / 发件箱 / 死信队列(inbox / outbox / dlq)

类 / 接口 作用
InboxStore 收件箱持久化接口,用于消息去重(幂等性),支持 insert / markAsSuccess / markAsFailed
InboxEntry 收件箱条目:messageId、channel、messageType、handles、createdAt
InboxHandle 处理器状态记录:handler 名称、状态(PENDING / SUCCESS / FAILED)、重试次数
OutboxStore 发件箱持久化接口:insert / markAsPublished、事务性消息保证
OutboxEntry 发件箱条目:messageId、channel、payload、状态、创建/更新时间
DeadLetterMessage 死信消息实体:原始消息、错误信息、失败时间、重试次数

接收者(Recipient)

接口 作用
Recipient 基础契约:getName();继承 AutoCloseable
Executor 标记子接口:单播/请求执行者
Subscriber 标记子接口:多播订阅者
RecipientRegistrar 接收者注册器:register(List<HandlerRegistration>, defaultTransport)

契约接口(标记)

接口 作用
Unicast 标记接口:点对点单播消息
Multicast 标记接口:发布-订阅多播消息
Request<R> 标记接口:请求-响应消息,响应类型为 R
Transport 传输抽象:getName()publishAsyncsendAsynccallAsync

注解(十种)

注解 目标 作用
@Subscribe 方法 声明处理器方法;value = 通道,group = 消费者组
@Channel 类型 覆盖默认通道名(默认全限定类名)
@Unicast 类型 标记为单播消息
@Multicast 类型 标记为多播消息
@Request 类型 标记为请求-响应,含 responseType()
@LocalMessage 类型 标记仅本地传输
@DistributedMessage 类型 标记仅分布式传输
@DispatchIn 类型 约束出站传输(transports()
@ReceiveIn 类型 约束入站传输(transports()
@Enqueue 类型 队列名 + 优先级

事件体系

作用
MessageProcessedEvent 基础事件:消息 + 上下文 + MessageProcessType
MessageDeliveredEvent 消息已投递
MessageReceivedEvent 消息已接收
MessageAcknowledgedEvent 消息已确认
MessageRepliedEvent 消息已回复(含响应载荷)
MessageHandledEvent 消息已处理(含处理器类型)
MessageSubscribedEvent 订阅元数据
MessageProcessType 枚举:SENDDELIVEREDRECEIVEDACKNOWLEDGEDREPLIEDHANDLED

异常层次

作用
MessageTypeException 无效/未分类的消息类型
MessageProcessingException 处理失败
MessageDeliverException 投递失败
MessageTransportException 传输层失败

Bus Core(euonia-bus-core)

消息总线运行时编排层:处理器发现、注册、分发、约定实现、策略实现、路由消息与总线 API。依赖 bus-abstractpipeline,将所有抽象契约组合为可用的消息总线引擎。

核心类

类 / 接口 作用
Bus 顶层总线接口:publishAsync(多播)、sendAsync(单播)、callAsync(请求-响应),以及流式构建器 publish() / send() / call()
MessageBus Bus 实现 — 编排引擎:类型校验 → 上下文解析 → 信封构建 → 管道执行 → 分发决策 → 传输投递
RoutedMessage<T> 传输信封:负载 + messageId / correlationId / conversationId / requestTrackId / channel / authorization / timestamp / metadata
Handler<M,R> 类型化处理器:R handle(M message, MessageContext context)
StrategicDispatcher Dispatcher 实现:策略匹配 + 基数校验 + 缓存,未匹配时回退到 defaultTransport
DefaultHandlerContext HandlerContext 实现:通道维度处理器注册、异步调用(单处理器→响应/失败,多处理器→并行扇出)
DefaultConfigurator Configurator 实现:流式配置约定/策略/处理器(四种注册方式:直接、类型、列表、包名)
MessageHandlerFinder 自动发现:@Subscribe 注解方法 + Handler<M,R> 接口实现
ChannelRegistrar 通道注册器:按通道名管理 MessageHandlerContext 列表,支持多处理器并行

约定与策略实现

类 / 接口 作用
MessageConvention 契约:isUnicast(String channel)isMulticast(String channel)isRequest(String channel)
DefaultMessageConvention 基于接口标记的约定:实现 Unicast / Multicast / Request<R> 接口
AnnotationMessageConvention 基于注解的约定:标注 @Unicast / @Multicast / @Request
BaseMessageConvention 组合约定引擎:聚合多个约定,带 ConcurrentHashMap 缓存
OverridableMessageConvention 包装约定,支持谓词覆写分类结果
DefaultMessageConventionBuilder 流式构建器
TransportStrategy 契约:outgoing(Class<?>)incoming(Class<?>)
BaseTransportStrategy 组合策略引擎:聚合多个策略,带缓存
DefaultTransportStrategy 中性默认策略(始终返回 false
AnnotationTransportStrategy 匹配 @DispatchIn / @ReceiveIn 注解
LocalMessageTransportStrategy 匹配 @LocalMessage 标注的类型
DistributedMessageTransportStrategy 匹配 @DistributedMessage 标注的类型
OverridableTransportStrategy 包装策略,支持谓词覆写
DefaultTransportStrategyBuilder 策略流式构建器

幂等性 & 管道行为

作用
IdempotentHandler 幂等处理器装饰器:处理消息前检查 InboxStore,防止重复处理;内置定时重试已失败消息
InboxPipelineBehavior 管道行为:消息处理后自动更新收件箱状态(成功/失败)

流式构建器

作用
SendBuilder 单播发送构建器:withCorrelationId()withChannel()executeAsync()
PublishBuilder 多播发布构建器:withChannel()executeAsync()
CallBuilder 请求-响应构建器:withCorrelationId()withChannel()executeAsync()

消息总线三类操作

操作 方法 消息类型 传输策略 返回值
发布 publishAsync / publish() Multicast 多个传输并行发送 CompletableFuture<Void>
发送 sendAsync / send() Unicast 单个传输 CompletableFuture<Void> 或含 Flow.Subscriber<R>
调用 callAsync / call() Request<R> 单个传输 CompletableFuture<R>

辅助类型

作用
MessageBusOptions 总线全局选项:约定、策略、默认传输、管道行为开关
ExtendableOptions 选项基类:messageId / channel / queue / priority / requestTraceId
PublishOptions 发布操作选项
SendOptions 发送操作选项(含 correlationId)
CallOptions 调用操作选项(含 correlationId)
PipelineMessage<M,R> 管道行为集成:绑定消息 + Pipeline,支持 .use() 追加行为
MessageCache 线程安全单例:消息类型 ↔ 通道名缓存(@Channel 优先,否则全限定类名)
MessageHandler / MessageHandlerFactory 内部类型擦除处理器抽象与工厂

关键特性:

  • 通过 @Subscribe 方法或 Handler<M,R> 接口自动发现处理器
  • 单处理器通道支持请求/响应(Unicast / Request);多处理器通道并行执行(Multicast)
  • TransportStrategy 系统映射消息类型到传输方式(Local vs Distributed)
  • Pipeline 集成,支持中间件风格的消息处理(日志、验证、转换、幂等)
  • 内置 IdempotentHandler + InboxPipelineBehavior 实现消息去重与幂等消费
  • 流式构建器 API(bus.publish(msg).withChannel("orders").executeAsync()

Bus InMemory(euonia-bus-inmemory)

进程内内存传输适配器 — 完整的 Transport 实现。提供无需外部中间件的纯内存消息分发,适用于开发测试、单进程集成及超低延迟场景。依赖 bus-abstractcore

核心类

作用
InMemoryTransport Transport 实现:publishAsyncWeakReferenceMessengersendAsync / requestAsyncStrongReferenceMessenger
InMemoryRecipientRegistrar RecipientRegistrar 实现:按 MessageConvention 分类,将处理器注册映射为接收者 + 信使注册
InMemoryRecipient 接收者基类:receive → ReceivedEvent → handleAsync → AcknowledgedEvent
InMemoryUnicastRecipient Executor:单播接收者
InMemoryMulticastRecipient Subscriber:多播接收者
InMemoryRequestRecipient Executor:请求-响应接收者
MessagePack 传输信封:RoutedMessage + MessageContext + aborted 标志

信使引擎(Messenger)

引用类型 用途
StrongReferenceMessenger 强引用 Unicast / Request —— 按消息类精确匹配,快照迭代,身份键防重复
WeakReferenceMessenger WeakReference Multicast —— 弱引用接收者,GC 自动退订,cleanup 扫描清理

映射规则: UnicastInMemoryUnicastRecipient → StrongMessenger;MulticastInMemoryMulticastRecipient → WeakMessenger;RequestInMemoryRequestRecipient → StrongMessenger。

Bus RabbitMQ(euonia-bus-rabbitmq)

RabbitMQ 传输适配器 — 完整的 Transport 实现。通过 RabbitMQ 代理提供分布式消息分发,支持队列、交换器、路由键映射与基于 Failsafe 的重试策略。依赖 bus-abstractcorecom.rabbitmq:amqp-client:5.31.0

核心类

作用
RabbitMqTransport Transport 实现:publishAsync → 扇出交换器广播;sendAsync → 队列单播;callAsync → RPC 调用并等待响应;内置 Failsafe 重试
RabbitMqRecipientRegistrar RecipientRegistrar 实现:按 MessageConvention 分类,将处理器注册映射为队列消费者 + 主题订阅者
RabbitMqRecipient 接收者基类:接收消息 → 触发事件 → 异步处理 → 确认
RabbitMqQueueConsumer 队列消费者:监听指定队列,反序列化消息并交付处理
RabbitMqTopicSubscriber 主题订阅者:绑定交换器与路由键,接收多播消息
RabbitMqRequestExecutor RPC 执行器:处理请求-响应模式,支持 replyTo 回调
RabbitMqBusOptions RabbitMQ 特定选项:连接工厂、交换器名、队列前缀、重试策略配置
RabbitMqConstants 常量定义:默认交换器名、队列前缀、超时时间、重试参数
RabbitMqReplyType 响应类型枚举

映射规则: UnicastRabbitMqQueueConsumerMulticastRabbitMqTopicSubscriberRequestRabbitMqRequestExecutor

Bus Kafka(euonia-bus-kafka)

Kafka 传输适配器 — 完整的 Transport 实现。通过 Apache Kafka 代理提供分布式消息分发,支持主题、消费者组与基于 Failsafe 的重试策略。依赖 bus-abstractcoreorg.apache.kafka:kafka-clients

核心类

作用
KafkaTransport Transport 实现:publishAsync → 主题广播;sendAsync → 主题单播(分区键路由);callAsync → RPC 调用并等待响应;内置 Failsafe 重试
KafkaRecipientRegistrar RecipientRegistrar 实现:按 MessageConvention 分类,将处理器注册映射为主题消费者 + 请求执行者
KafkaRecipient 接收者基类:接收消息 → 触发事件 → 异步处理 → 确认
KafkaTopicSubscriber 主题订阅者:加入消费者组,接收多播消息
KafkaQueueConsumer 队列消费者:监听主题,反序列化消息并交付处理
KafkaRequestExecutor RPC 执行器:处理请求-响应模式
KafkaBusOptions Kafka 特定选项:Bootstrap Server、消费者组、重试策略配置
KafkaConstants 常量定义:默认主题前缀、消费者组、超时时间、重试参数

映射规则: UnicastKafkaQueueConsumerMulticastKafkaTopicSubscriberRequestKafkaRequestExecutor

Spring(euonia-spring)

Spring 集成模块。通过 ApplicationContextServiceProvider 建立桥接,为 Pipeline 及其它 Euonia 组件提供无缝依赖注入。

说明
ApplicationContextServiceProvider 基于 Spring ApplicationContextServiceProvider 实现,支持 getBeanProviderautowireBean 与构造参数创建
ServiceProviderConfiguration Spring @Configuration,自动注册 ServiceProvider Bean

关键特性:

  • 为 Pipeline 与其它 Euonia 组件提供 Spring DI 能力
  • 自动注入 Spring 管理的 Bean 到 Pipeline 委托/行为
  • 提供带自动装配的反射构建兜底能力
  • 极简接入:@Import(ServiceProviderConfiguration.class) 或组件扫描

OSBA(euonia-osba)

面向对象可扩展业务架构:提供富业务对象模型,支持规则校验、属性变更追踪、状态管理与反射驱动工厂。

业务对象层级

BusinessObject<B>          — 核心:规则、上下文、属性管理
    └── ObservableObject<T>  — 状态跟踪:NEW / CHANGED / DELETED
        ├── EditableObject<T>  — 支持异步规则校验与保存
        ├── ReadOnlyObject<T>  — 带权限控制的只读对象
        └── ExecutableObject<T> — 模板化执行对象

核心概念

概念 说明
BusinessContext 服务定位与对象工厂上下文;负责注入上下文与初始化规则
PropertyInfo 强类型属性元数据:名称、类型、友好名、默认值、字段引用
FieldDataManager 实例级反射字段值管理
Rule System 异步规则校验,基于 RuleManager(类型级单例)与 Rules(实例级执行器)
ObjectEditState 生命周期状态机:NONE → NEW → CHANGED → DELETED
ObjectFactory 反射驱动 CRUD 工厂:@FactoryCreate@FactoryFetch@FactoryInsert@FactoryUpdate@FactoryDelete@FactoryExecute

规则系统

protected void addRules() {
    getRules().addRule(new LambdaRule<>(age, (a, ctx) -> a != null && a >= 18, "Must be 18+"));
}
说明
Rule 接口:getName()getProperty()getPriority()executeAsync(RuleContext)
LambdaRule<T> 基于 Lambda:(value, context) → boolean
RegularRule 基于方法执行
RequiredRule 非空属性校验
BrokenRule / BrokenRuleCollection 校验结果集合,含严重级别(ERROR/WARNING/INFO)
RuleCheckException 校验失败时抛出

示例应用

sample 模块演示了 Euonia 与 Spring Boot 4.1 的完整集成,包含 CQRS 命令查询职责分离与消息总线:

组件 说明
SampleApplication Spring Boot 入口
User 聚合 基于 EditableObject<User>,使用 @FactoryCreate、自定义规则与 Snowflake ID
UserCreateCommand / UserUpdateCommand CQRS 命令对象,继承 CommandBase(通过消息总线单播发送)
UserCreateCommandHandler / UserUpdateCommandHandler 命令处理器,通过 @Subscribe 注解注册到消息总线
UserCreatedEvent(领域事件) 聚合内领域事件
UserCreatedEto(集成事件) 跨服务集成事件(Event Transfer Object),通过 RabbitMQ 发布
UserCreatedEventHandler 集成事件处理器
UserApplicationService 应用服务契约接口
UserApplicationServiceImpl 应用服务实现,通过 Bus.send() 发送命令
UserController REST API:POST /api/userGET /api/user/{id}
PipelineController Pipeline 演示端点
MessageBusConfiguration 消息总线 Spring 配置:注册 RabbitMQ + InMemory 双传输、Jackson JSON 序列化器、消息约定/策略/处理器
HttpContextFilter 请求上下文过滤器
GlobalExceptionHandler 全局异常处理
UserRepository Spring Data JPA 仓储

技术栈

类别 技术
语言 Java 17+(sample 使用 Java 25)
框架 Spring Boot 4.1(Spring MVC、Spring Data JPA、Spring Framework 7.0)
数据库 MySQL、H2(内存模式)
消息系统 RabbitMQ(分布式)、InMemory(本地)双传输
API 文档 SpringDoc OpenAPI 3.0
构建 Maven
ID 生成 Snowflake、UUID、ULID
Pipeline 自定义中间件管道(责任链 / middleware 模式)
DI 集成 基于 ServiceProvider 的 Spring ApplicationContext 集成
CQRS 命令(Command)/ 事件(Event)分离,通过消息总线分发
幂等性 基于 InboxStoreIdempotentHandler 消息去重

快速开始

Maven 依赖

<!-- 核心工具 -->
<dependency>
    <groupId>com.euonia</groupId>
    <artifactId>core</artifactId>
    <version>10.0.0</version>
</dependency>

<!-- Pipeline 中间件 -->
<dependency>
    <groupId>com.euonia</groupId>
    <artifactId>pipeline</artifactId>
    <version>10.0.0</version>
</dependency>

<!-- Spring 集成 -->
<dependency>
    <groupId>com.euonia</groupId>
    <artifactId>spring</artifactId>
    <version>10.0.0</version>
</dependency>

<!-- 业务对象(OSBA) -->
<dependency>
    <groupId>com.euonia</groupId>
    <artifactId>osba</artifactId>
    <version>10.0.0</version>
</dependency>

<!-- 领域驱动设计(DDD) -->
<dependency>
    <groupId>com.euonia</groupId>
    <artifactId>domain-driven-design</artifactId>
    <version>10.0.0</version>
</dependency>

<!-- 消息总线(抽象层) -->
<dependency>
    <groupId>com.euonia</groupId>
    <artifactId>bus-abstract</artifactId>
    <version>10.0.0</version>
</dependency>

<!-- 消息总线(核心运行时) -->
<dependency>
    <groupId>com.euonia</groupId>
    <artifactId>bus-core</artifactId>
    <version>10.0.0</version>
</dependency>

<!-- 消息总线(内存传输) -->
<dependency>
    <groupId>com.euonia</groupId>
    <artifactId>bus-inmemory</artifactId>
    <version>10.0.0</version>
</dependency>

<!-- 消息总线(RabbitMQ 传输) -->
<dependency>
    <groupId>com.euonia</groupId>
    <artifactId>bus-rabbitmq</artifactId>
    <version>10.0.0</version>
</dependency>

<!-- 消息总线(Kafka 传输) -->
<dependency>
    <groupId>com.euonia</groupId>
    <artifactId>bus-kafka</artifactId>
    <version>10.0.0</version>
</dependency>
// 定义业务对象
@Component @Scope("prototype")
public class Order extends EditableObject<Order> {
    private final PropertyInfo<String> productName = registerProperty(String.class, "productName");

    @FactoryCreate
    protected void create(String productName) {
        super.create();
        setProductName(productName);
        setId(ObjectId.snowflake().getValue(Long.class));
    }

    @Override
    protected void addRules() {
        getRules().addRule(new RequiredRule(productName));
    }
}

// 使用工厂
@Autowired
private ObjectFactory factory;

var order = factory.create(Order.class, "Widget");
order.save(false);

构建

# 构建全部模块
mvn clean install

# 运行示例应用
cd sample
mvn spring-boot:run

发布

# 发布到 Maven 中央仓库
mvn clean deploy -DskipTests -P release 2>&1 | tee release.log

项目链接


赞助

donate


JetBrains

感谢 JetBrains 通过其 开源免费许可证计划 提供 全家桶产品支持


Alt

About

Euonia is a development framework for building enterprise Java applications. It combines Object-Oriented Scalable Business Architecture (OSBA) with Domain-Driven Design (DDD) principles to provide a comprehensive foundation for creating robust, maintainable business applications.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.