当前位置: 首页 > 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.lryc.cn/news/612454.html

相关文章:

  • 低代码系统的技术深度:超越“可视化操作”的架构与实现挑战
  • MCU编程中的临界资源及临界区
  • 【51单片机2个独立按键2个独立数码管静态显示内容自定】2022-10-22
  • 从 0 到 1 创建 InfluxDB 3 表:标签、字段、命名规范一篇讲透
  • 无人机航拍数据集|第4期 无人机太阳光伏板红外目标检测YOLO数据集10945张yolov11/yolov8/yolov5可训练
  • 无人机图传的得力助手:5G 便携式多卡高清视频融合终端的协同应用
  • ⭐CVPR 文本到 3D 场景生成新突破:Prometheus 框架解析
  • 小实验--继电器定时开闭
  • Pytest项目_day04(Python做接口请求)
  • vector使用模拟实现
  • Linux 学习 之 killer 问题
  • Unity笔记(三)——父子关系、坐标转换、Input、屏幕
  • STM32学习笔记3-GPIO输入部分
  • 【模电笔记】—— 直流稳压电源——稳压电路
  • RK3568笔记九十六:多路实时目标检测
  • Python应用指南:获取风闻评论数据并解读其背后的情感倾向(二)
  • 【补题】CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes!) D. K-good
  • 基于单片机GD32E103的HID按键问题分析
  • hive专题面试总结2
  • 一、Envoy基础概念学习
  • 8.6笔记
  • 《嵌入式数据结构笔记(四):栈结构与队结构链表》
  • Chrontel【7322BMF】CH7322B HDMI Consumer Electronics Control (CEC) devices
  • GaussDB 数据库架构师修炼(六)-3 集群工具管理-主备倒换
  • prometheus+Grafana 监控中间件项目
  • 202506 电子学会青少年等级考试机器人四级实际操作真题
  • 架构层防护在高并发场景下的实践
  • 机器学习-LinearRegression
  • 机器学习模型调优实战指南
  • 机器学习——SVM