【直播预告】程序员逆袭 CEO 分几步?
https://ahoowang.gitee.io/wow/
更新内容
Make Easy Again :再一次提升 Wow 框架开发效率。
Wow 除了为命令(Command)自动生成了 OpenAPI 端点,另外还提供了查询(Query) OpenAPI 端点。 这意味着开发人员通常只需专注于编写领域模型,即可完成服务开发,而无需费心处理查询逻辑的实现,极大提升了开发效率。
- 特性(query): 支持
Query DSL
,使得构建查询变得更加简单和直观 - 特性(query): 支持
SnapshotQueryService
API - 特性(openapi): 支持
QuerySnapshotRouteSpec
API - 特性(openapi): 支持
QuerySnapshotStateRouteSpec
API - 特性(openapi): 支持
PagedQuerySnapshotRouteSpec
API - 特性(openapi): 支持
PagedQuerySnapshotStateRouteSpec
API - 特性(openapi): 支持
SingleSnapshotRouteSpec
API - 特性(openapi): 支持
SingleSnapshotStateRouteSpec
API - 特性(openapi): 支持
CountSnapshotRouteSpec
API - 重构(dashboard): 使用查询服务(
QueryService
)替换特定API,提高了代码的可维护性 - 依赖(dashboard): 升级
karma
版本 到v6.4.3
- 依赖(dashboard): 升级
monorepo
版本 到v17.2.3
- 依赖(test): 升级
io.mockk:mockk
版本 到v1.13.10
- 依赖(opentelemetry): 升级
io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom
版本 到v1.33.0
- 依赖(build): 升级
ksp
版本 到v1.9.22-1.0.18
QueryDsl
通过 QueryDsl
,您可以轻松构建复杂的查询条件,例如:
pagedQuery { pagination { index(1) size(10) } sort { "field1".asc() } condition { "field1" eq "value1" "field2" ne "value2" "filed3" gt 1 "field4" lt 1 "field5" gte 1 "field6" lte 1 "field7" like "value7" "field8" isIn listOf("value8") "field9" notIn listOf("value9") "field10" between (1 to 2) "field11" all listOf("value11") "field12" startsWith "value12" "field13" elemMatch { "field14" eq "value14" } "field15".isNull() "field16".notNull() and { "field3" eq "value3" "field4" eq "value4" } or { "field3" eq "value3" "field4" eq "value4" } } }
OpenAPI
以下是一个示例 curl
命令,用于执行查询:
curl -X 'POST' \ 'http://localhost:8080/execution_failed/snapshot/pagination' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "sort": [ { "field": "_id", "direction": "DESC" } ], "pagination": { "index": 1, "size": 10 }, "condition": { "field": "", "operator": "AND", "value": "", "children": [ { "field": "state.recoverable", "operator": "NE", "value": "UNRECOVERABLE", "children": [] }, { "field": "state.status", "operator": "NE", "value": "SUCCEEDED", "children": [] }, { "field": "state.isBelowRetryThreshold", "operator": "EQ", "value": false, "children": [] } ] } }'
TypeScript
在 TypeScript 中,您可以使用 Conditions
类来构建复杂的查询条件,例如:
Conditions.and( [ Conditions.ne(ExecutionFailedFields.RECOVERABLE, RecoverableType.UNRECOVERABLE), Conditions.ne(ExecutionFailedFields.STATUS, ExecutionFailedStatus.SUCCEEDED), Conditions.eq(ExecutionFailedFields.IS_BELOW_RETRY_THRESHOLD, false) ] )
简介
Wow 是一个基于领域驱动设计和事件溯源的现代响应式 CQRS 微服务开发框架,历经多年生产环境验证。
旨在帮助开发者构建现代化的、高性能且易于维护的微服务应用程序,充分发挥领域驱动设计和事件溯源等模式优势的同时降低应用的复杂性以及实践成本。
值得一提的是,领域驱动设计和事件溯源并非微服务架构的专属,Wow 框架不仅适用于微服务开发,同样也可用于构建基于领域驱动设计的单体应用程序。
快速开始
使用 Wow 项目模板快速创建基于 Wow 框架的 DDD 项目
特性概览
架构图
商业智能是企业决策的关键支持,而数据则是商业智能的分析原料。业务数据越为丰富有价值,商业智能的分析结果越准确,决策也就更加可靠。
与传统架构有着显著差异,Wow 提供了实时聚合根状态事件(StateEvent
)和聚合命令(Command
)作为数据分析的数据源,同时极大降低了实时 ETL(Extract
, Transform
, Load
)的难度。
在传统架构中,实现实时 ETL 通常需要经过繁琐的流程,包括 DB->CDC->Process->DB
,而在 Wow 框架中,仅需一段简单的 SQL 脚本即可完成这一过程。
另外,在传统架构中,使用 CDC(MySql Binlog
)数据仅记录数据的变化,缺乏明确的业务语义。进行业务分析时,需要基于数据状态的变化推断出业务语义,这往往需要进行大量的数据处理。 相较之下,Wow 框架直接提供了聚合根状态事件和聚合命令作为数据分析的数据源,极大降低了数据处理的难度。
Wow 提供的实时同步机制将数据实时同步至数据仓库(ClickHouse),为实时数据分析提供了极大的便利。这种方法为商业智能提供了强有力的支持,构建了一个实时数据分析系统,使决策制定能够基于及时而准确的信息。
你可以在这里了解更多关于 Wow 商业智能。
操作审计
操作审计是企业中保障安全性和合规性的重要组成部分,同时也是对系统操作进行监控和追踪的关键手段。Wow 框架在这方面为企业带来了显著的优势。
通过记录聚合命令(Command
)作为操作审计的数据源,Wow 框架能够详细追踪系统中的各种操作。 这些记录不仅包含了操作本身的内容,还涵盖了操作触发的副作用(领域事件),为审计提供了更为全面和准确的数据基础。
相较于传统审计方法,Wow 框架的操作审计的数据源具备更加明确的业务语义,以及操作后产生的明确领域事件。
此外,Wow 框架提供的实时数据同步机制也为操作审计带来了便利,确保了审计数据的及时性和一致性。
了解更多关于 Wow 操作审计。
还没有评论,来说两句吧...