Wow 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
Wow 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
Wow 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 Apache
操作系统 跨平台
软件类型 开源软件
所属分类 程序开发微服务框架
开源组织
地区 国产
投 递 者 Ahoo-Wang
适用人群 未知
收录时间 2023-06-02

软件简介

Wow:基于 DDD、EventSourcing 的现代响应式 CQRS 架构微服务开发框架

领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源

简介

Wow 是一个基于领域驱动设计和事件溯源的现代响应式 CQRS 微服务开发框架,历经多年生产环境验证。

旨在帮助开发者构建现代化的、高性能且易于维护的微服务应用程序,充分发挥领域驱动设计和事件溯源等模式优势的同时降低应用的复杂性以及实践成本。

值得一提的是,领域驱动设计和事件溯源并非微服务架构的专属,Wow 框架不仅适用于微服务开发,同样也可用于构建基于领域驱动设计的单体应用程序。

快速开始

使用 Wow 项目模板快速创建基于 Wow 框架的 DDD 项目

特性概览

Wow-Features

架构图

Wow-Architecture

背景

随着业务的发展和复杂性的增加,传统的架构和开发方式逐渐显露出瓶颈。领域驱动设计事件溯源等理念在提高系统设计的灵活性和可维护性方面表现出色,但在实践中常常需要面对复杂性和学习曲线的挑战。

Wow 框架的目标是以简单易用的方式将领域驱动设计和事件溯源等理念融入到微服务应用开发中,降低开发者的学习成本,提高开发效率。 通过提供现代响应式的 CQRS 架构和相关组件,Wow 框架旨在让开发者更专注于业务逻辑的实现,而不必过多关心底层技术细节。

经过多年的实践和不断的演进,Wow 框架在生产环境中得到了验证,积累了丰富的经验。这些经验和反馈不仅丰富了框架的功能和性能,也为持续的改进和优化提供了宝贵的指导。

对于开发者而言,Wow 框架意味着什么?

我曾告诫我的团队:如果我们过于依赖数据驱动设计而忽视领域驱动设计,我们最终将沦为CRUD工程师。

CRUD工程师的竞争力和可替代性可想而知,这或许是为何会有 35 岁效应,企业显然更倾向于招募没有太多生活羁绊、更加廉价的 25 CRUD工程师。

业务价值

软件系统的核心价值体现在业务价值上,研发人员不应只关注技术实现上,而是应该更多地关注业务价值的实现。 这其中的好处显而易见,当你开发完一个业务系统之后,你将变成一个业务专家,甚至比跟你合作的领域专家还要专业,因为你需要洞察业务细节。

使用 Wow 框架,意味着你将关注点放在围绕领域模型设计上,与业务专家一起探索业务领域,而不是关注于技术实现上。 你仅需编写领域模型,即可完成服务开发,Wow 框架自动为你准备好 OpenAPI 接口。

在《实现领域驱动设计》一书中,作者 Vaughn Vernon 提到:核心域才值得投入精力进行领域驱动设计, 但如果你使用 Wow 框架,你将发现,因为低廉开发成本、快速的开发效率,即使是次要的支撑子域也值得 DDD

性能与伸缩性

随着业务的发展,你需要开始思考系统的性能和伸缩性问题。 在传统架构中,这牵扯到数据库关系模式、分片规则等复杂问题,同时你还需要处理因数据库分片导致的跨分片事务问题。 这时,你不得不修改你的业务代码,以适应水平拆分后的数据库架构。

然而,如果你选择使用 Wow 框架,你将不再需要过多关注数据库关系模式、分片规则等问题。你的业务代码无需变更,系统能够轻松实现水平伸缩。

你可以在这里了解更多关于 Wow 框架的性能

读写分离与同步延迟

读写分离是一种极为普遍的性能优化架构模式。 然而,同步延迟问题常伴随而来,事务执行成功后写库落库成功,但读库同步延迟,用户刷新页面后无法获取最新数据,从而对用户的体验产生影响。例如:

  • 用户发起下单事务,写库执行成功,但由于某种原因,读库同步延迟,用户刷新页面后发现订单未成功创建。
  • 商家编辑完商品后,同步到 Elasticsearch 索引库,但由于某种原因,同步延迟,导致商家刷新页面后搜索不到该商品。

通常,大家采用最简便的方法,等待1秒后刷新页面。 虽然这种方式能解决大多数数据同步延迟的问题,但效率不够高。 因为大多数情况下,同步在100毫秒内就已完成,剩余的900毫秒成了浪费。 然而,有时1秒无法完成同步,这就导致用户获取的数据变得无效

使用 Wow 框架,你可以通过等待 PROJECTED 信号完成,然后再将结果返回给用户,以更为优雅和高效的方式处理数据同步延迟的问题。

工程质量

单元测试是确保代码质量且符合预期业务需求的重要手段,但在传统架构中,单元测试往往是一项相当困难的任务,因为你需要考虑数据库连接、事务管理、数据清理等问题。

使用 Wow 框架,你将会发现基于 Given->When->Expect 模式的测试套件,使得单元测试变得异常简单。 你只需关注领域模型是否符合预期,而无需为数据库连接等问题烦恼。

在实际应用中,我们将领域模型的单元测试覆盖率下限阈值设置为 85%,也是可以轻松实现的。

在没有刻意要求的情况下,开发人员甚至自觉地将覆盖率提升至 95%

因此,每次提交代码都变得轻松自在,因为你确信你的代码经过了充分的测试,并且真正意义上从单元测试中获得了收益。

在研发同级别的项目中,我们的测试团队在系统 API 测试中发现,基于 Wow 框架的项目,其 BUG 数仅为传统架构项目的 1/3

你可以在这里了解更多关于 Wow 单元测试套件

对于企业而言,Wow 框架意味着什么?

商业智能

商业智能是企业决策的关键支持,而数据则是商业智能的分析原料。业务数据越为丰富有价值,商业智能的分析结果越准确,决策也就更加可靠。

与传统架构有着显著差异,Wow 提供了实时聚合根状态事件(StateEvent)和聚合命令(Command)作为数据分析的数据源,同时极大降低了实时 ETLExtract, Transform, Load)的难度。

在传统架构中,实现实时 ETL 通常需要经过繁琐的流程,包括 DB->CDC->Process->DB,而在 Wow 框架中,仅需一段简单的 SQL 脚本即可完成这一过程。

另外,在传统架构中,使用 CDCMySql Binlog)数据仅记录数据的变化,缺乏明确的业务语义。进行业务分析时,需要基于数据状态的变化推断出业务语义,这往往需要进行大量的数据处理。 相较之下,Wow 框架直接提供了聚合根状态事件和聚合命令作为数据分析的数据源,极大降低了数据处理的难度。

Wow 提供的实时同步机制将数据实时同步至数据仓库(ClickHouse),为实时数据分析提供了极大的便利。这种方法为商业智能提供了强有力的支持,构建了一个实时数据分析系统,使决策制定能够基于及时而准确的信息。

你可以在这里了解更多关于 Wow 商业智能

操作审计

操作审计是企业中保障安全性和合规性的重要组成部分,同时也是对系统操作进行监控和追踪的关键手段。Wow 框架在这方面为企业带来了显著的优势。

通过记录聚合命令(Command)作为操作审计的数据源,Wow 框架能够详细追踪系统中的各种操作。 这些记录不仅包含了操作本身的内容,还涵盖了操作触发的副作用(领域事件),为审计提供了更为全面和准确的数据基础。

相较于传统审计方法,Wow 框架的操作审计的数据源具备更加明确的业务语义,以及操作后产生的明确领域事件。

此外,Wow 框架提供的实时数据同步机制也为操作审计带来了便利,确保了审计数据的及时性和一致性。

了解更多关于 Wow 操作审计

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击引领话题📣 发布并加入讨论🔥
发表了资讯
03/07 09:49

🎉 领域模型即服务 | Wow 2.16.16 发布

领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 官方文档: https://ahoowang.gitee.io/wow/ 更新内容 https://ahoowang.gitee.io/wow/guide/query.html Wow 除了为命令(Command)自动生成了 OpenAPI 端点,另外还提供了查询(Query) OpenAPI 端点。 这意味着开发人员通常只需专注于编写领域模型,即可完成服务开发,而无需费心处理查询逻辑的实现,极大提升了开发效率。 特性(query)...

0
0
发表了资讯
03/06 09:54

🎉 领域模型即服务 | Wow 2.16.12 发布

领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 官方文档: https://ahoowang.gitee.io/wow/ 更新内容 https://ahoowang.gitee.io/wow/guide/query.html Wow 除了为命令(Command)自动生成了 OpenAPI 端点,另外还提供了查询(Query) OpenAPI 端点。 这意味着开发人员通常只需专注于编写领域模型,即可完成服务开发,而无需费心处理查询逻辑的实现,极大提升了开发效率。 特性(query)...

0
2
发表了资讯
03/05 08:35

🎉 DDD 即服务 | Wow 2.16.8 发布

领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 官方文档: https://ahoowang.gitee.io/wow/ 更新内容 https://ahoowang.gitee.io/wow/guide/query.html Make Easy Again :再一次提升 Wow 框架开发效率。 Wow 除了为命令(Command)自动生成了 OpenAPI 端点,另外还提供了查询(Query) OpenAPI 端点。 这意味着开发人员通常只需专注于编写领域模型,即可完成服务开发,而无需费心处理命...

1
1
发表了资讯
03/02 11:39

🎉 领域模型即服务 | Wow 2.16.6 发布

领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 官方文档: https://ahoowang.gitee.io/wow/ 更新内容 Make Easy Again :再一次提升 Wow 框架开发效率。 Wow 除了为命令(Command)自动生成了 OpenAPI 端点,另外还提供了查询(Query) OpenAPI 端点。 这意味着开发人员通常只需专注于编写领域模型,即可完成服务开发,而无需费心处理查询逻辑的实现,极大提升了开发效率。 特性(query)...

2
3
发表了资讯
02/26 08:25

🎉 领域模型即服务 | Wow 2.15.5 发布

领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 官方文档: https://ahoowang.gitee.io/wow/ 更新内容 重构(core): 移除重复的上下文写入 依赖: 升级 org.springframework.boot:spring-boot-dependencies 版本 到 v3.2.3 依赖(compensation): 升级 me.ahoo.coapi:coapi-bom 版本 到 v1.0.5 依赖(core): 升级 me.ahoo.cosid:cosid-bom 版本 到 v2.6.6 依赖(core): 升级 me.ahoo.simb...

0
2
发表了资讯
01/31 09:43

🎉 领域模型即服务 | Wow 2.15.2 发布

领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 官方文档: https://ahoowang.gitee.io/wow/ 更新内容 特性(core): 支持自动扫描 MessageFunction 注册到消息处理器 特性(core): 增强 MessageFunction 以支持动态筛选消息 特性(core): 事件分发器支持按聚合类型延迟分组 特性(core): 为 BodyTypeNotFoundDomainEvent 添加消息体类型(bodyType) 特性(test): SagaVerifier 支持相同事件...

0
1
发表了资讯
01/26 10:16

🎉 提升 Java 互操作性 | Wow 2.15.1 发布

领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 官方文档: https://ahoowang.gitee.io/wow/ 更新内容 特性 (test): 提升单元测试套件Java互操作性 Java Kotlin (推荐) 聚合 aggregateVerifier(Account.class, AccountState.class) .given() .when(new CreateAccount("name", 100L)) .expectEventType(AccountCreated.class) .expectState(account -> { assertT...

4
5
发表了资讯
01/25 14:07

🎉 领域模型即服务 | Wow 2.15.0 发布

领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 官方文档: https://ahoowang.gitee.io/wow/ 更新内容 特性(openapi): 新增 GenerateGlobalIdRouteSpec ,支持通过 RESTfull API 生成全局ID 特性(openapi): 新增 GenerateBIScriptRouteSpec ,支持通过 RESTfull API 生成BI脚本能力 特性(openapi): 新增 GetWowMetadataRouteSpec ,支持通过 RESTfull API 获取 Wow 元数据 依赖(dash...

0
3
发表了资讯
01/20 13:26

🎉 领域模型即服务 | Wow 2.14.2 发布

领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 官方文档: https://ahoowang.gitee.io/wow/ 更新内容 特性(compensation): 使用 CoApi 替换WebClient实现微信机器人API 特性(doc): 将 CoApi 添加到 Awesome Microservices 依赖: 升级 angular 到 v17.1.0 依赖: 升级 CoApi 到 v0.6.0 依赖: 升级 CosId 到 v2.6.5 依赖: 升级 ksp 版本 到 v1.9.22-1.0.17 依赖: 升级 org.springfram...

0
7
发表了资讯
01/15 10:02

🎉 领域模型即服务 | Wow 2.14.0 发布

领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 官方文档: https://ahoowang.gitee.io/wow/ 更新内容 特性(core): 优化 MessageFunction 命名定义,以提升 DEBUG 便捷性 修复(compensation): 修复 ExecutionFailedApplied 异常信息未正确赋值 特性(bi): 支持ListLikeType/MapLikeType 特性(bi): 支持嵌套的 MapLikeType 值类型 依赖: 升级 io.opentelemetry:opentelemetry-bom 到 ...

0
3
发表了资讯
01/12 09:36

🎉 领域模型即服务 | Wow 2.13.6 发布

领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 官方文档: https://ahoowang.gitee.io/wow/ 更新内容 增强 BI 模块生成ETL实时同步脚本特性。 聚合命令(Command): 包含用户发送的所有命令。 状态事件(StateEvent): 包含聚合状态的完整变化历史,同时记录了引发这些状态变更的事件关联信息。 最新状态事件(LastStateEvent): 包含最新的聚合状态,类似于传统数据库中的表,专门...

0
2
发表了资讯
01/10 17:32

🎉 领域模型即服务 | Wow 2.13.2 发布

领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 官方文档: https://ahoowang.gitee.io/wow/ 更新内容 新增 wow-bi 模块,自动生成 ETL 实时同步脚本,以及快照展开视图-~->>数据仓库的大宽表。 聚合命令(Command): 包含用户发送的所有命令。 状态事件(StateEvent): 包含聚合状态的完整变化历史,同时记录了引发这些状态变更的事件关联信息。 最新状态事件(LastStateEvent): 包...

0
4
发表了资讯
01/08 09:17

🎉 领域模型即服务 | Wow 2.12.6 发布

领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 官方文档: https://ahoowang.gitee.io/wow/ 更新内容 特性(api): 增强 @Retry API,支持 recoverable 和 unrecoverable 参数,用于标记执行函数发生异常时的可恢复性 特性(core): 支持通过 RecoverableExceptionRegistrar 标记异常可恢复性 特性(core): 新增 RecoverableException 标记自定义异常可恢复性 特性(core): 新增 Recovera...

0
4
发表了资讯
01/04 12:44

🎉 领域模型即服务 | Wow 2.12.4 发布

领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 官方文档: https://ahoowang.gitee.io/wow/ 更新内容 特性(core): 支持通过 ErrorCodeMapping 自定义异常代码(ErrorCode) 依赖(core): 升级 CosId 到 v2.6.4 依赖(doc): 升级 angular-cli 到 v17.0.9 简介 Wow 是一个基于领域驱动设计和事件溯源的现代响应式 CQRS 微服务开发框架,历经多年生产环境验证。 旨在帮助开发者构建现代化...

1
5
发表了资讯
01/03 09:40

🎉 领域模型即服务 | Wow 2.12.3 发布

领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 官方文档: https://ahoowang.gitee.io/wow/ 更新内容 特性(lib): 添加 WowEndpoint ,支持通过 spring-boot-actuator 暴露 Wow 编译时元数据的能力,以便验证 Wow 元数据(WowMetadata) 定义的正确性。 特性(doc): 使用 VitePress 替换 VuePress 作为静态文档站点生成器 特性(doc): 添加对站点地图的支持 特性(doc): 更新 wow-spring...

0
1
发表了资讯
2023/12/29 16:49

🎉 领域模型即服务 | Wow 官方文档正式发布

领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 更新内容 永远免费的官方文档正式发布! 🎉 采用 Apache 2.0 许可证,与源码一起提供,使用 Gitee Pages 部署。 https://ahoowang.gitee.io/wow/ 简介 Wow 是一个基于领域驱动设计和事件溯源的现代响应式 CQRS 微服务开发框架,历经多年生产环境验证。 旨在帮助开发者构建现代化的、高性能且易于维护的微服务应用程序,充分发挥领...

0
5
发表了资讯
2023/12/26 17:06

🎉 领域模型即服务 | Wow 2.12.2 发布

基于 DDD、EventSourcing 的现代响应式 CQRS 架构微服务开发框架 领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 更新内容 永远免费的官方文档(30% 预览版) 发布! 🎉 https://ahoowang.gitee.io/wow/ 特性(core): PrepareKey API 支持重新分配唯一性 KEY 特性(dashboard): 点击 Logo 跳转到默认导航 依赖: 升级 com.google.devtools.ksp:symbol-processing-api v1.9.22-1.0....

12
9
发表了资讯
2023/12/24 19:06

🎉 领域模型即服务 | Wow 2.12.1 发布

基于 DDD、EventSourcing 的现代响应式 CQRS 架构微服务开发框架 领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 更新内容 增强 事件补偿控制台 特性(dashboard): 支持在事件补偿控制台配置执行失败的重试策略 特性(dashboard): 支持查看事务补偿-历史记录 特性(dashboard): 添加事件补偿-正在执行导航 特性(dashboard): 添加事件补偿通知快速打开执行失败链接 特性(OpenAPI): 添加 ...

0
0
发表了资讯
2023/12/22 09:04

🎉 领域模型即服务 | Wow 2.11.2 发布

基于 DDD、EventSourcing 的现代响应式 CQRS 架构微服务开发框架 领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 更新内容 新增 事件补偿 —— 群机器人(企业微信) 通知 🎉🎉,提升事件补偿处理效率!!! 特性: 分布式补偿调度器(CompensationScheduler) 支持自定义配置 特性: 新增 @Retry 注解 API,以支持更友好的客户端重试策略配置 特性: MessageFunction API 支持获取...

2
3
发表了资讯
2023/12/21 09:55

🎉 领域模型即服务 | 事件补偿控制台 | Wow 2.11.0 发布

基于 DDD、EventSourcing 的现代响应式 CQRS 架构微服务开发框架 领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 更新内容 新增 事件补偿控制台 🎉🎉,提升事件补偿处理效率!!! 特性: 新增强制执行重试命令(ForcePrepareCompensation)API 依赖: 升级 io.swagger.core.v3:swagger-core-jakarta v2.2.20 依赖: 升级 com.google.guava:guava v33 事件补偿控制台 事件补偿...

2
3
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
0 评论
35 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部