当前位置: 首页 > news >正文

【java】DDD架构同普通微服务项目的区别

前言:

初次接触DDD架构有点蒙蔽,简单实战过后,有点心得和体会,简单总结下:

拆解成 4 个关键词:

统一语言
开发、业务、测试用同一套无歧义的业务词汇说话,并原封不动地出现在代码里。

例:代码里出现 order.confirmPayment(),而不是 orderService.updateStatus(orderId, 2)。
限界上下文(Bounded Context)

把庞大系统切成一个个高内聚、低耦合的业务边界,每个边界内部有一套完整的模型和语言。

例:订单上下文只关心“订单聚合”,库存上下文只关心“库存聚合”,两者通过事件交互。
聚合根(Aggregate Root)

每个业务边界里,用一个“根实体”封装所有业务规则和数据一致性。

例:Order 聚合根内部自己校验状态、扣减库存、发布事件,外部代码不能直接碰它的子对象。
领域事件(Domain Event)

把“发生了什么”广播出去,让其他上下文异步响应,实现松耦合。

例:OrderPaidEvent 触发库存扣减、邮件发送、BI 统计,而订单聚合根本身不直接调用库存服务。
一句话记忆:

DDD 让代码先描述业务,再考虑技术;普通架构让代码先描述技术,再补业务。
普通服务下单:校验状态在service层,扣减库存,,,ddd 校验状态在领域层,然后扣减库存通过异步mq 是这点区别吗

订单业务举例

把“校验状态 + 扣减库存”这两个动作拆开来看,DDD 与普通服务在位置、时机、耦合度上完全不同,下面用一张“时间线”让你一眼看懂。
在这里插入图片描述

一句话总结

普通服务:Service 既当裁判又当运动员——校验、改状态、调库存全混在一起,同步耦合。
DDD:聚合根当裁判(只负责业务正确性),事件当邮差(异步通知别人干活),彻底解耦。
所以区别不仅是“校验位置”,而是“谁负责业务正确性 + 如何通知协作方”的整体设计哲学。

http://www.dtcms.com/a/317165.html

相关文章:

  • 23.统计分析:从数据中挖掘洞察
  • 深入浅出 RabbitMQ - 主题模式(Topic)
  • JavaWeb(04)
  • 丝滑qt页面跳转
  • android10~16变更一览和开发者兼容应对
  • 学习 Android(十五)NDK进阶及性能优化
  • antd组件select下拉数据分页加载
  • 学习 Android (十六) 学习 OpenCV (一)
  • Cglib的Enhancer实现动态代理?
  • 新能源汽车热管理系统核心零部件及工作原理详解
  • AI巨模型对决2025:五强争霸,谁能称王?
  • ORACLE 19C建库时卡在46%、36%
  • 【网络运维】Linux:简单DHCP服务器的部署
  • PyTorch入门引导
  • 识别 Base64 编码的 JSON、凭证和私钥
  • 接口自动化测试用例详解
  • 使用python与streamlit构建的空间微生物分析
  • RabbitMQ 全面指南:从基础概念到高级特性实现
  • 控制服务和守护进程-systemctl
  • python学智能算法(三十四)|SVM-KKT条件回顾
  • 系统的缓存(buff/cache)是如何影响系统性能的?
  • 【学习笔记之redis】删除缓存
  • 【Redis】hash哈希,List列表
  • app-3
  • Python day36
  • Java Stream API 详解(Java 8+)
  • IP与MAC地址的区别解析
  • 数据仓库命名规范
  • AS32S601 芯片 ADC 模块交流耦合测试:技术要点与实践
  • 使用 gptqmodel 量化 Qwen3-Coder-30B-A3B-Instruct