Malize's blog Malize's blog
首页
  • 设计模式

    • 设计模式总览
    • 工作中用到的设计模式
  • 并发编程

    • 死锁
  • 技术文档

    • Docker 核心命令大全
    • Markdown 使用教程
    • npm 常用命令
    • yaml 语言教程
    • Nodejs 递归读文件
  • DDD 领域驱动(基础)

    • DDD 是什么
    • 领域、子域与限界上下文
    • 实体、值对象与聚合
    • 领域事件
    • 分层架构与架构模型
  • DDD 领域驱动(实战)

    • DDD、中台与微服务
    • 事件风暴与中台建模
    • 微服务代码模型
    • 边界、视图与微前端
    • 设计实例与拆分原则
    • 分布式架构关键设计10问
  • 学习笔记总览
  • 入门
  • 部署
  • 进阶
  • 集成
  • 优化
  • 面试
  • 构造问答系统

    • 项目背景
    • 构建答疑机器人
    • 扩展知识范围
    • 优化提示词
    • 自动化评测
    • 优化 RAG 应用
  • 构建 Agent 系统

    • Agent 基础与工具调用
    • 规划与执行
    • 多 Agent 团队协作
    • Memory 积累经验
    • Skill 可复用流程
    • Qwen Code 实践
  • 交付上线

    • 走向生产环境
    • 模型蒸馏
    • 部署模型
    • 生产实践
    • 安全合规
  • 工具手册

    • OpenClaw 命令速查
  • 规范 & 实践

    • 代码规范
    • sharding-jdbc
    • CIM 半导体行业
    • HTML 常用 meta
    • CSS 技巧收藏
  • 微服务

    • feign原理
  • Git

    • Git 笔记总览
    • Git 使用手册
    • Git 修改分支名
    • 团队 Git 分支规范
  • GitHub & 博客

    • GitHub 高级搜索技巧
    • GitHub Actions 自动部署
    • 博客搭建 - 百度收录
  • 优质网站
  • 前端库推荐
  • 成长学习

    • 学习方法
    • 英语学习:奥格登 850 词
    • 敏捷开发实战
    • 提示词工程
  • 生活

    • 实用技巧
    • 心情杂货
    • 梦境与灵感
  • 技术问题

    • 面试问题备忘
  • 索引

    • 分类
    • 标签
    • 按年归档
GitHub (opens new window)

Malize

持续学习,持续成长
首页
  • 设计模式

    • 设计模式总览
    • 工作中用到的设计模式
  • 并发编程

    • 死锁
  • 技术文档

    • Docker 核心命令大全
    • Markdown 使用教程
    • npm 常用命令
    • yaml 语言教程
    • Nodejs 递归读文件
  • DDD 领域驱动(基础)

    • DDD 是什么
    • 领域、子域与限界上下文
    • 实体、值对象与聚合
    • 领域事件
    • 分层架构与架构模型
  • DDD 领域驱动(实战)

    • DDD、中台与微服务
    • 事件风暴与中台建模
    • 微服务代码模型
    • 边界、视图与微前端
    • 设计实例与拆分原则
    • 分布式架构关键设计10问
  • 学习笔记总览
  • 入门
  • 部署
  • 进阶
  • 集成
  • 优化
  • 面试
  • 构造问答系统

    • 项目背景
    • 构建答疑机器人
    • 扩展知识范围
    • 优化提示词
    • 自动化评测
    • 优化 RAG 应用
  • 构建 Agent 系统

    • Agent 基础与工具调用
    • 规划与执行
    • 多 Agent 团队协作
    • Memory 积累经验
    • Skill 可复用流程
    • Qwen Code 实践
  • 交付上线

    • 走向生产环境
    • 模型蒸馏
    • 部署模型
    • 生产实践
    • 安全合规
  • 工具手册

    • OpenClaw 命令速查
  • 规范 & 实践

    • 代码规范
    • sharding-jdbc
    • CIM 半导体行业
    • HTML 常用 meta
    • CSS 技巧收藏
  • 微服务

    • feign原理
  • Git

    • Git 笔记总览
    • Git 使用手册
    • Git 修改分支名
    • 团队 Git 分支规范
  • GitHub & 博客

    • GitHub 高级搜索技巧
    • GitHub Actions 自动部署
    • 博客搭建 - 百度收录
  • 优质网站
  • 前端库推荐
  • 成长学习

    • 学习方法
    • 英语学习:奥格登 850 词
    • 敏捷开发实战
    • 提示词工程
  • 生活

    • 实用技巧
    • 心情杂货
    • 梦境与灵感
  • 技术问题

    • 面试问题备忘
  • 索引

    • 分类
    • 标签
    • 按年归档
GitHub (opens new window)
  • 技术文档

  • GitHub技巧

  • Nodejs

  • 博客搭建

  • CIM

  • 代码规范

  • 前端基础

  • 微服务

  • Git

  • 数据库

  • DDD领域驱动

    • DDD是什么:为什么微服务设计要选择DDD
    • 领域、子域与限界上下文
    • 实体、值对象、聚合与聚合根
    • 领域事件:微服务解耦的关键
    • DDD分层架构与微服务架构模型
    • DDD、中台与微服务的铁三角
    • 事件风暴与中台业务建模实战
    • DDD微服务代码模型设计
    • 微服务的边界、数据视图与微前端
      • 一、警惕"小单体微服务"
      • 二、三种边界
      • 三、四种服务 + 三种调用场景
      • 四、四种数据对象的流转(PO/DO/DTO/VO)
      • 五、微前端:前端也要拆
        • 业务单元:微前端 + 微服务 = 组件
        • 集成方式
        • 团队分工的变化
        • 案例:一个 APP 卖全险种
      • 六、小结
    • 微服务设计实例与拆分原则
    • 分布式架构关键设计10问
  • Elasticsearch

  • 技术
  • DDD领域驱动
malize
2026-08-03
目录

微服务的边界、数据视图与微前端

# 微服务的边界、数据视图与微前端

合并整理三讲:边界(15)、视图(16)、前端设计(17)。这三讲讲的都是"落地之后怎么不走样"。

# 一、警惕"小单体微服务"

很多团队拆微服务的方式是:把单体的一个软件包按功能拆成几个包,各自部署——搞定!但包内还是三层架构,代码高度耦合,逻辑边界不清。这叫小单体微服务。

它的结局是可预见的:随着需求膨胀,某天要把部分功能拆出去或和别的服务重组时,才发现每个"微服务"内部还是一团乱麻,只能再来一轮痛苦重构。辛辛苦苦好多年,一夜回到解放前。

根因:只定义了一个维度的边界(服务之间的物理边界),漏掉了服务内部的边界。

# 二、三种边界

边界 位置 性质 作用
逻辑边界 微服务内聚合之间 虚拟边界 架构演进的单位——需要时可升级为物理边界
物理边界 微服务之间 进程隔离 部署运行、服务调用、容错
代码边界 不同层/聚合的代码目录 目录隔离 控制重组影响范围

微服务是否设计合理,就看一条标准:架构演进(拆分/重组)时成本高不高。Martin Fowler 说微服务的重要特征是"演进式架构"——支持增量的、非破坏性的变更。

边界清晰的服务,演进就是搬聚合包;边界不清的服务,演进就是重写。

另外,聚合不一定都要拆成微服务。逻辑边界和物理边界不必强行一致——管理能力(CI/CD、运维、监控)跟不上时拆太细就是灾难。先把逻辑边界划清楚,等有能力了随时可以拆,这才是从容的姿势。

# 三、四种服务 + 三种调用场景

微服务内部的服务类型,从下往上:

仓储服务(基础层)→ 实体方法/领域服务(领域层)→ 应用服务(应用层)→ Facade(接口层)
1

三种调用场景:

  1. 微服务内跨层调用:前端 → API 网关 → Facade → 应用服务 → 领域服务 → 实体方法 → 仓储。特例:查缓存/文件这类没啥领域逻辑的操作,应用服务可以直接调仓储,跳过领域层
  2. 微服务之间调用:应用服务对应用服务(直连或走网关),涉及跨服务写操作要注意分布式事务
  3. 领域事件驱动:微服务内走事件总线,微服务间走消息中间件,异步解耦

严格分层 vs 松散分层,再强调一次:松散分层图省事(下层服务直接暴露给任意上层),但核心逻辑容易泄漏、服务变更时找不全调用方。推荐严格分层 + 逐层封装。

# 四、四种数据对象的流转(PO/DO/DTO/VO)

对象 全称 活动范围 职责
PO Persistent Object 基础层 和数据库表结构一一映射
DO Domain Object 领域层、应用层 核心业务的数据+行为载体
DTO Data Transfer Object 接口层、跨微服务 数据传输,隔离内部领域模型
VO View Object 前端 适配页面/组件展示

完整流转:

数据库 ←PO→ 仓储转换 ←DO→ 领域层/应用层 ←DTO→ 接口层(Assembler转换) ←VO→ 前端页面
1

为什么要这么多对象来回转换?每层的关注点不同:PO 迁就表结构,DO 迁就业务模型,DTO 迁就传输和隔离,VO 迁就展示。嫌麻烦把 PO 一路用到前端的项目,最后都会变成"改个表字段全链路震动"。

# 五、微前端:前端也要拆

后端微服务化之后,如果前端还是一个单体大前端,前端团队要对接所有中台团队、集成成千上万的 API——沟通成本和出错概率都是灾难。

微前端就是把微服务思想搬到前端:按领域模型和微服务边界拆分前端页面,每个微前端独立开发、部署、运维,只负责特定业务单元的 UI。

# 业务单元:微前端 + 微服务 = 组件

一个中台团队负责一个业务单元(微前端 + 对应微服务,前后端已集成),对外提供的是"从页面到逻辑自包含"的业务组件。三种组合形态:

  • 单一业务单元:1 微前端 + 1 微服务
  • 组合业务单元:1 微前端 + N 微服务(别组太多,否则退化回单体前端)
  • 通用共享业务单元:订单、支付这类通用微前端,被各流程共享

# 集成方式

  • 微前端 ↔ 主页面:主页面像"门户",通过微前端注册 + 页面路由 + 动态加载,把微前端"拼图式"拼进来
  • 微前端 ↔ 微服务:常规前后端分离,调 API 网关上的服务

# 团队分工的变化

  • 前端团队:只管主页面——整体风格、主流程编排、微前端加载路由。不再需要理解每个业务的 API 细节
  • 中台团队:负责自己业务单元的前后端全部——熟悉的人干熟悉的事

# 案例:一个 APP 卖全险种

保险集团要在一个前端卖寿险、财险所有产品,不同产品页面要素、规则差异很大。解法是借鉴电商订单模式:

选商品(商品目录微前端)→ 录单(各产品的出单微前端,按路由动态加载)
→ 加购物车(购物车微前端)→ 生成订单(订单微前端)→ 支付(支付微前端)
→ 投保微服务把订单里的投保单转成保单
1
2
3

用户全程感觉在一个应用里操作,实际背后是一堆独立部署的业务单元在轮流上台。前端融合,后端解耦。

# 六、小结

  • 微服务要守三个边界:逻辑(聚合间)、物理(服务间)、代码(目录间),只有物理边界的是"小单体"
  • 服务逐层封装:实体方法 → 领域服务 → 应用服务 → Facade
  • 数据对象各层各司其职:PO ↔ DO ↔ DTO ↔ VO
  • 前端复杂到一定程度就上微前端,按业务单元组队,前端拼图、后端解耦
编辑 (opens new window)
#DDD#微服务#微前端
上次更新: 2026/10/08, 03:22:29
DDD微服务代码模型设计
微服务设计实例与拆分原则

← DDD微服务代码模型设计 微服务设计实例与拆分原则→

最近更新
01
奥格登基础英语 850 词
10-08
02
Elasticsearch 入门
10-08
03
Elasticsearch 优化
10-08
更多文章>
Theme by Vdoing | Copyright © 2023-2026 Malize | GitHub | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式