CHES & D 分层架构 (CHES & D Layered Architecture)

概览 (Overview)

StackSaga 引入了一种名为 CHES 分层架构 的全新设计模式。它是 Spring 传统三层架构的演进扩展版本。在深入探讨 CHES & D 分层架构之前,让我们先快速回顾一下 Spring 的三层架构。

默认 Spring 分层架构 (Default Spring Layered Architecture)

在常规开发中,您通常已经熟悉并使用以下 Spring 三层架构:

  1. 控制器层 (Controller Layer / 表现层)

  2. 服务层 (Service Layer / 业务逻辑层)

  3. 仓储层 (Repository Layer / 数据访问层)

当迁移到微服务架构时,如果数据需要从另一个微服务获取,数据访问层通常会被客户端层 (Client Layer) 所替代。该客户端可以是 HTTP 客户端,也可以是目标服务支持的任何其他协议客户端。

下图展示了微服务中的分层架构:

微服务中的 Spring Boot 分层架构

  • 在这里,您可以看到 orderService 使用 StockRepository(仓储层)访问本地数据库,而 PaymentService 使用 PaymentServiceClient(客户端层)从外部 PaymentService 访问数据。

演进至 CHES & D 分层架构 (Migration to CHES & D Layered Architecture)

CHES & D 分层架构

CHES & D 分层架构由五个分层组成,新引入了处理程序层 (Handler Layer) 与执行器层 (Executor Layer):

  1. C —— 控制器层 (Controller Layer)

  2. H —— 处理程序层 (Handler Layer)

  3. E —— 执行器层 (Executor Layer)

  4. S —— 服务层 (Service Layer)

  5. D —— 数据访问层 (Data Access Layer)

    • 仓储层 (Repository Layer)

    • 客户端层 (Client Layer)

接下来深入探讨每一层的职责:

C —— 控制器层 (Controller Layer)

与常规模式一致,控制器层是表现层。 它负责接收外部 HTTP/REST 请求并执行请求参数校验与响应包装。 在 StackSaga 中,控制器层在此处调用处理程序层 (Handler Layer),将业务请求委托给 StackSaga SEC 引擎。

H —— 处理程序层 (Handler Layer)

这是发起事务以及感知事务全生命周期所有更新状态的核心层:

  1. 接收携带初始数据的业务事务,将其转换为领域实体并委托给 SEC 引擎启动 Saga。

  2. 接收 SEC 引擎基于各执行器执行状态所触发的事件通知。在此处,您可以将事务状态更新实时推送或通知给所属的终端用户。