DDD在点评交易系统演进中的应用

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. DDD在点评交易系统演进中的应用 王吕松 2022.08 点评事业部
2. 个人简介 王吕松,美团技术专家,7年交易系统建设经验 2016年加入美团,目前主要从事点评交易系统相关研发工作
3. 主要内容 1. 点评交易业务介绍 2. 领域驱动设计概述 3. 点评交易系统演进 4. 总结和思考
4. 点评交易业务-整体介绍 境外 交易 商场 团购 达人 商单
5. 点评交易业务-境外交易产品 境外门票 境外餐厅订座 境外休闲娱乐
6. 点评交易业务-商场团购交易产品 普通团单 秒杀团单
7. 点评交易业务-达人商单交易产品 达人商单交易
8. 主要内容 1. 点评交易业务介绍 2. 领域驱动设计概述 3. 点评交易系统演进 4. 总结和思考
9. 什么是领域驱动设计 领域 驱 动 设计 什么是领域? 业务问题域,比如电商领域、医疗领域、保险领域 什么是驱动? 问题域驱动领域建模、领域模型驱动技术实现 什么是设计? 领域模型的设计,用领域模型表达现实世界 领域驱动设计是一种处理高度复杂领域的设计思想,试图通过分离技术实现的复杂性, 围 绕业务概念构建领域模型来控制业务的复杂性,以解决软件难以理解,难以演化等问题。
10. 领域驱动设计核心概念 战略设计 问题 空间 核心子域 领 域 限 界 上 下 文 支撑子域 通用子域 实体 值对象 资源库 领域事件 聚合 工厂 • 问题空间和解决方案空间 • 战略设计和战术设计 统一 语言 战术设计 解决 方案 空间 • 统一语言 聚合根 领域服务 应用服务 • 领域和子域 • 限界上下文 • 聚合和聚合根 • 实体和值对象
11. 领域驱动设计过程 统一语言 支撑子域 限界上下文 言 语 一 炼 提 领域模型 成 成 限界上下文 炼 模型驱动设计 维护领域模型完整性 3. 连接业务和系统 通用子域 成 炼 提 领域模型 提 描 1. 建立统一语言 业务、产品、研发 限界上下文 解 理 领域模型 统 2. 分解问题域 核心子域 问题域 + 业务愿景 适用于一种上下文 领域知识 提升对领域知识的理解 创建 参考《领域驱动设计模式、原理与实践》 - Scott Millett、Nick Tune
12. 主要内容 1. 点评交易业务介绍 2. 领域驱动设计概述 3. 点评交易系统演进 4. 总结和思考
13. 点评交易系统的发展历程 第一阶段 第二阶段 第三阶段 单业务线单业务形态 单业务线多业务形态 多业务线多业务形态 简单架构阶段 微服务化阶段 平台化阶段
14. 简单架构阶段-背景介绍 业务背景: • 品类 美食 从预订形态切入,美食、门票2个品类 门票 核心诉求:快 • • 业务 形态 预订 业务:从0到1,探索试错多 技术:快速搭建服务,快速交付 团队规模:小 按业务环节简单划分模块,快速交付、快速响应
15. 简单架构阶段-系统架构 接入层 服务层 数据层 商家B端 WEB 商家 SERVICE 商品C端 WEB 商品 SERVICE 商家 | 商品 | 订单 订单C端 WEB 订单 SERVICE 系统架构 • 系统按业务简单拆分(B端、C端、订单) • 分层架构(Web、Service、DAO) 存在的问题 • 数据驱动设计,模型不能直接反映业务 • 传统分层架构和面向过程编程,功能逻辑易分散、不够内聚
16. 微服务化阶段-背景介绍 品类 业务 形态 美食 门票 交通票 休闲娱乐 演出赛事 电话卡 购物 日游 签证 预订 团购 订座 购物 业务 模式 • • • • 自营 三方 直签 包票 产品 形态 • • 单品 套餐 库存 模式 • • • • 日历库存 时段库存 总库存 共享库存 价格 模式 • • 单一价格 日历价格 业务背景: • • 业务形态:预订 -> 预订+团购+订座+购物 品类:由少变多 团队规模: • 后端人数规模扩大 • 如何管理复杂性? 规模 结构 变化 基于DDD的微服务化,分治+分层+分离
17. 微服务化阶段-基于DDD的落地方法 理解问题域 识别限界上下文 • • • • • • 业务价值分析 业务需求分析 业务概念模型 需求 分析 识别 界限 组织边界 业务边界 应用边界 DDD落地过程 模型实现 • • • 应用分层架构 微服务架构 应用集成 架构 映射 领域 建模 领域建模 • • • 领域分析建模 领域设计建模 持续迭代模型 参考《解构领域驱动设计》 - 张逸
18. 微服务化阶段-问题域分析-业务价值分析 业务价值分析 么 什 做 商业模式画布 我要 识别利益相关者 关键业务 重要合作 Key Activities Key Partnerships 明确系统愿景 确定系统范围 什 决 解 题 问 么 客户关系 Customer 价值主张 Relationships Value 核心资源 谁 决 解 Propositions 渠道通路 Key Resources 题 问 的 客户细分 Customer Segments Channels 成本结构 收入来源 Cost Structure Revenue Streams 参考《Business Model Generation》 - Alexander Osterwalder 核心 价值 • • 为用户提供境外出行场景下的“吃住行游购娱”的一站式服务体验 为商家提供境外出行场景的产品一体化售卖平台
19. 微服务化阶段-问题域分析-业务需求分析 1 销售 创建客户 客户合作流程 发起签约 3 商家 完成签约 创建商品 浏览商品 用户 运营 财务 商品审核 在线下单 在线交易流程 处理订单 发送凭证 出示凭证 完成支付 接收凭证 用户到店 核销凭证 商家对账 商品上架 2 商家上单流程 发送账单 4 资金结算流程 完成打款
20. 微服务化阶段-问题域分析-业务需求分析 点评交易系统 检索商品 查看商品内容 保存基本信息 设置预订规则 设置退款规则 保存商品规则 查看商品详情 查看审核列表 <<include>> <<include>> 保存商品库存 新建商品 <<include>> 保存商品价格 机器审核 设置售卖价 审核驳回 提交商品审核 上架商品 审核通过 设置结算价 <<include>> <<include>> 商家 人工审核 设置市场价 运营 <<include>> 发布商品 更新商品库存 下架商品 预览商品 查看操作记录 查看修改内容 查看操作记录
21. 微服务化阶段-问题域分析-业务需求分析 点评交易系统 浏览商品列表 查看商品详情 查看订单详情 选择立减 使用优惠券 查看价格日历 购买商品 使用积分 使用优惠 <<include>> 人工确认订单 发送通知 <<include>> <<include>> <<include>> 确认订单 直连确认订单 人工确认订单 提交订单 拒绝订单 <<include>> 发送通知 买家 核销凭证 直连确认订单 确认支付 <<include>> 选择支付渠道 检索订单 人工发送凭证 <<include>> 查看订单详情 浏览订单列表 检索订单 申请退款 同意退款 发送凭证 发送通知 直连发送凭证 查看支付结果 商家 拒绝退款 订单退款 客服 订单赔付 重发凭证
22. 微服务化阶段-问题域分析-用户故事&用例规约 角色 业务功能 服务价值 用例名称:提交订单 用例名称:创建商品 用例描述:作为买家,我想要提交订单,以便购买到需要的商品 用例描述:作为商家,我想要创建商品,以便商品上线售卖 成功场景 触发事件:填写订单信息,点击“提交订单”按钮 触发事件:填写商品信息,点击“提交审核”按钮 基本流程: 基本流程: 1. 验证商品是否在线 1. 商家填写商品标题、图片、费用说明等基本信息 2. 验证预订规则、限购规则、联系人和出行人的必填字段 2. 商家录入门店价格、售卖价格、库存类型、库存等信息 3. 验证剩余库存数量是否大于购买数量 3. 商家填写预订时间时间、预订数量限制、下单必填项以及 4. 验证抵用券、红包、积分等订单优惠信息 退款规则等商品售卖规则信息 5. 计算并校验订单价格 4. 商家点击提交按钮 6. 创建支付单 5. 校验账号权限以及数据完整性和正确性 失败场景 7. 保存订单信息 6. 保存商品信息 替代流程: 7. 新建审核流程 1a. 如果商品不在线,返回提示信息 替代流程: 2a. 如果超过购买数量或不在规定时间范围内,返回提示信息 5a. 如果账号无权限,返回提示信息 5b. 如果商品信息或售卖规则缺失,返回提示信息 3a. 如果商品库存不足,返回提示信息 业务规则 5c. …… 4a. …… 验收标准: 验收标准: 1. 商品包含基本信息、售卖规则、售卖单元、价格、库存 1. 订单需要包含订单项、联系人、出行人、优惠等信息 2. 商品提交审核后,商品状态为“待审核” 2. 订单项中SKU的购买数量小于或等于库存数量 3. 商品提交审核后,存在审核流程 3. 订单保存后,订单状态更新为“已提交” 遵循统一语言 4. …… 4. ……
23. 微服务化阶段-问题域分析-概念模型 优惠 使用 优惠 抵用券 积分 红包 销售 用户 商家 签约 商家 账号 选择 订单 商品 商品 合同 下单 规则 订单 订单项 联系人 支付单 账户 创建 价格 库存 结算 接单 结算账单 结算账户 记账、算账 财务 商家 收款单 付款单
24. 微服务化阶段-问题域分析-问题子域划分 统一 语言 • 商家 • 买家 • 商品 • 订单 • 支付 • 优惠 • 结算 • 凭证 • 核销 • 对账 用 例 分 析 • 售卖规则 • 售卖单元 • 门店价格 • 售卖价格 • 库存 • 订单项 • 支付单 • 联系人 • 限购规则 • 积分 订单域 支付域 (核心域) 优惠域 (支撑域) (通用域) 商品域 商家域 结算域 (支撑域) 商品域 (支撑域) (核心域) 核心域 订单域 用户域 (通用域) • 重点 关注 业务视角:业务环节、业务方向 通知域 (通用域) • 组织视角:业务职能 用 例 规 约
25. 微服务化阶段-识别限界上下文-业务边界 根 据 子 域 初 步 划 分 限 界 上 下 文 商家上下文 订单上下文 商品上下文 支付上下文 优惠上下文 结算上下文 用户上下文 通知上下文 语义相关性主要针对业务活动的名词,具有相 同宾语的业务活动可以归类到同一个业务主体 功能相关性从业务活动所服务的业务目标进行归 类,同一业务目标相关的业务活动可以归为一类
26. 微服务化阶段-识别限界上下文-业务边界 商品流程 商品 制作 参与方 商家 商品 商品 审核 商品 交易 运营 用户 关注点 关注 商家 录单 效率 关注 如何 快速 审核 关注 用户 消费 决策 识别限界上下文 模板 草稿 商品 制作 上下文 订单 购买 上下文 关注点 购买 过程 素材 支付 过程 数据 真实 履约 时效 内容 合规 商品 审核 上下文 订单 履约 上下文 销量 售价 库存 商品 展销 上下文 订单 售后 上下文 交付 内容 退款 规则 退款 金额 关注 如何 购买 参与方 用户 订单流程 订单 购买 订单 关注 如何 履约 关注 如何 退款 商家 订单 履约 客服 订单 售后
27. 微服务化阶段-识别限界上下文-应用边界 质量属性 商品计算量大 服务集成 商品 购买 商品 计算 计算任务多样 计算规则复杂 商品计算上下文 查询 同步 商品 上单 占位 预订 履约 功能复用 凭证 商品 管理 订单 管理 凭证 核销 第三方 系统 资源管理 授权管理 权限验证 权限查询 取消 售后 直连上下文 商家权限上下文
28. 微服务化阶段-识别限界上下文-总结 商家上下文 稳定空间 D U 最小完备 限界上下文映射 限界上下文特征 订单购买上下文 OHS/PL ACL D U 自治单元 D 商品发布上下文 独立进化 OHS/PL ACL U D 自我履行 U 商品展销上下文 上下文识别 验证原则 通信集成模式 团队协作模式 • • • • • • • • • • • • • 组织边界 业务边界 应用边界 正交原则 奥卡姆剃刀原则 防腐层 开放主机服务 发布语言 共享内核 合作者 客户方/供应方 分离模式 遵奉者
29. 微服务化阶段-领域建模-建模过程和方法 实体 事件 订单项 订单聚合 订单项 监听 支付单聚合 值对像 支付单 支付单 订单 履约单 联系人 退款申请单 概 念 模 型 联系人 监听 设 计 模 型 监听 事件 履约单聚合 监听 履约单 退款单聚合 退款申请单 实体 基于战术设计元模型 凭证项 订单 退订项 事件 凭证项 凭证项聚合 领域分析建模 领域设计建模 • • • • • • 分析用例规约和用户故事 寻找概念对象,名词和动词 识别语义联系,添加关联关系 区分实体和值对象,丰富领域行为 定义聚合、识别聚合根 添加领域服务和领域事件 退订项 事件
30. 微服务化阶段-模型实现-领域模型映射 业务活动-1 业务视角 组合任务 (逻辑单元组) 业务流程 业务活动-2 组合任务 业务活动-3 原子任务 结构化拆解 组合任务 原子任务 原子任务 原子任务 (逻辑单元) 是否原子任务 是 否 技术视角 分层映射 用户接口 服务契约 应用服务 是否外部资源 否 领域服务 聚合 服务契约 组合服务 是 原子服务 原子服务 端口
31. 微服务化阶段-模型实现-应用分层架构 分层架构原则 • 接入层 C端API B端API M端API … 分层架构实践 • 限界上下文 事件处理 应用层 服务编排 事件处理 聚合A MQ 事件总线 领域层 值对象 实体 实体 • DO 值对象 基础设施 缓存 消息 外部依赖 配置 RPC实现 ACL RPC调用 DTO 面向用例和流程,不包含业务规则和逻辑 服务组合和编排 关注核心业务逻辑实现 表达业务概念、业务状态、业务规则 基础设施层 - - DO 安全认证、权限校验、限流控制 领域层 - - • 负责向用户显示信息和解释用户指令 应用层 - - Gateway DO 数据访问 • 领域服务 Gateway 基础 设施 查询服务 聚合B 领域服务 接入层 - - DTO DTO 订阅事件 领域事件 聚合协同 关注点分离+SOLID原则 提供通用技术和基础服务 依赖倒置设计(DIP原则) 限界上下文
32. 平台化阶段-背景介绍 业务背景: 业务线 业务 形态 境外 业务 境外 门票 商场 团购 • 达人 商单 核心 问题 预订 团购 订座 业务线:境外-> 境外+境外门票+商场团购+达人商单 • 如何最大程度复用业务之间的通用能力? • 如何提升业务BP和平台团队的协作效率? 购物 解决 • 领域模型提炼,构建平台领域模型+业务扩展模型 思路 • 插件模式集成平台能力和业务能力,实现业务BP自主定制化开发
33. 平台化阶段-平台领域模型提炼 预订模型-A 境外业务 团购模型-A 预订 境外门票 预订模型-B 团购模型-B 团购 预订模型-C 商场团购 … 达人商单 境外 业务 定制 模型 团购模型-C … … 境外 门票 定制 模型 商场 团购 定制 模型 达人 商单 定制 模型 识别同类项 归并&重组 预订模型 团购模型 标准领域模型 …
34. 平台化阶段-插件模式集成 业务流程 应用服务-2 应用服务-1 领域服务-1 模型-1 扩 展 点 模型-2 方法 扩 展 点 扩 展 点 应用服务-3 领域服务-1 领域服务-2 模型-3 模型-1 扩 展 点 扩 展 点 应用 服务 领域服务-2 模型-2 方法 扩 展 点 扩 展 点 模型-3 扩 展 点 领域 服务 领域 能力 + 能力 扩展 插件SDK 插件包-1 插件包-2 插件包-3
35. 主要内容 1. 点评交易业务介绍 2. 领域驱动设计概述 3. 点评交易系统演进 4. 总结和思考
36. 总结和思考-DDD总结 • DDD是一种开放思想体系 • 战略设计更重要,战术设计可结合实际情况做好取舍 • 领域建模不是瀑布式的,而是螺旋式、不断迭代的过程(建模涡流) • DDD不会强制使用某种架构模式,它只关注是否实现业务和技术复杂性的分离
37. 总结和思考-工程师思维模型 分层思维 分治思维 结构化思维 工程思维 抽象思维 技术 模型 思维模型 用户思维 业务思维 产品思维 业务
38. Q&A
39. 招聘:后台开发岗位 邮箱:renshilong02@meituan.com 更多技术干货 欢迎关注“美团技术团队”

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-17 19:00
浙ICP备14020137号-1 $Map of visitor$