领域驱动设计实战

2024-09-21  本文已影响0人  AlphaHinex

原文地址:https://alphahinex.github.io/2024/09/22/ddd-in-action/


description: "一个简化的外卖系统 DDD 设计实践"
date: 2024.09.22 10:26
categories:
- DDD
tags: [DDD]
keywords: DDD, 统一建模语言, 事件驱动架构, 限界上下文, 领域事件, 工程结构


需求概述

需求为一个简化的外卖平台,包括下订单、支付、取消、商家接单、准备、派送等功能。

架构风格选择

采用领域驱动设计方法进行问题空间分析及解空间设计。划分顾客、商家、骑手、订单、通知五个限界上下文,每个上下文成为一个微服务。服务内部采用分层架构。服务之间以开放主机服务及事件驱动架构。数据库逻辑隔离,通过事件机制保证最终一致性。

统一建模语言

快速建模法

名词建模

识别业务服务规约中的名词

动词建模

识别业务服务规约中的动词,判断动词对应的领域行为是否产生了过程数据,如果有,则将该过程数据识别为领域概念

归纳抽象

针对有定语修饰的领域概念进行归纳抽象

确定关系

确定领域概念之间的关系

领域分析模型精炼

领域分析模型与限界上下文

  1. 领域分析模型
  2. 区分实体和值对象,设计聚合
  3. 限界上下文及上下文映射图
bounded-context

领域事件及 Topic

事件风暴方法分析命令、领域事件及聚合:

domain-event events

事件驱动机制及事务管理机制

工程结构设计

参考结构

mapping package

以上两张图片引自 《解构领域驱动设计》

实际结构

服务名

  1. order:订单
  2. consumer:顾客
  3. merchant:商家
  4. courier:骑手
  5. notification:通知

包划分

  1. com.neusoft.hackathon.order.north:北向网关,包括本地和远程调用;相当于领域模型对其他限界上下文暴露的接口;前后端接口的适配也可以在这个包里完成,如 north.controller
  2. com.neusoft.hackathon.order.domain:领域模型,尽量保持稳定,需求不变领域模型尽量不变
  3. com.neusoft.hackathon.order.south:南向网关,包括端口和适配器,用来调用其他限界上下文接口以及资源库
上一篇 下一篇

猜你喜欢

热点阅读