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

【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.xdnf.cn/news/17269.html

相关文章:

  • DAY 36 复习日
  • MinIO01-入门
  • ara::log::LogStream::WithTag的概念和使用案例
  • Patsy的dmatrix() 函数
  • 利用m0改造循迹模块处理笔记00
  • 智慧酒店:科技赋能下的未来住宿新体验
  • 人工智能领域、图欧科技、IMYAI智能助手2025年7月更新月报
  • RabbitMQ延时队列的两种实现方式
  • NLP自然语言处理 03 Transformer架构
  • 数据集相关类代码回顾理解 | sns.distplot\%matplotlib inline\sns.scatterplot
  • 翻译的本质:人工翻译vs机器翻译的核心差异与互补性
  • 自然语言处理×第三卷:文本数据分析——她不再只是贴着你听,而开始学会分析你语言的结构
  • 最长连续序列(每天刷力扣hot100系列)
  • FANCU发那科机器人双脉冲焊接省气
  • 【STM32】HAL库中的实现(三):PWM(脉冲宽度调制)
  • 信用机制的发展与货币演进
  • 机器学习算法系列专栏:决策树算法(初学者)
  • golang的切片
  • 电子秤利用Websocket做为Client向MES系统推送数据
  • python的教务管理系统
  • 利用链上数据进行数字资产量化因子发现
  • 【Day 16】Linux-性能查看
  • Linux内核C语言代码规范
  • LangGraph学习笔记 — LangGraph中State状态模式
  • 数据安全治理——解读数据安全治理与评估服务业务介绍【附全文阅读】
  • oelove奥壹新版v11.7旗舰版婚恋系统微信原生小程序源码上架容易遇到的几个坑,避免遗漏参数白屏显示等问题
  • 相机拍摄的DNG格式照片日期如何修改?你可以用这款工具修改
  • vue3 子组件和子组件的通讯 mitt
  • 分布式选举算法:Bully、Raft、ZAB
  • 私有云盘新体验:FileRise在cpolar的加持下如何让数据管理更自由?